// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Sheets API Version v4
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/sheets/'>Google Sheets API</a>
 *      <tr><th>API Version<td>v4
 *      <tr><th>API Rev<td>20170317 (806)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/sheets/'>
 *              https://developers.google.com/sheets/</a>
 *      <tr><th>Discovery Name<td>sheets
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Sheets API can be found at
 * <a href='https://developers.google.com/sheets/'>https://developers.google.com/sheets/</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Sheets.v4
{
    /// <summary>The Sheets Service.</summary>
    public class SheetsService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v4";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public SheetsService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public SheetsService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            spreadsheets = new SpreadsheetsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "sheets"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://sheets.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Sheets API.</summary>
        public class Scope
        {
            /// <summary>View and manage the files in your Google Drive</summary>
            public static string Drive = "https://www.googleapis.com/auth/drive";

            /// <summary>View the files in your Google Drive</summary>
            public static string DriveReadonly = "https://www.googleapis.com/auth/drive.readonly";

            /// <summary>View and manage your spreadsheets in Google Drive</summary>
            public static string Spreadsheets = "https://www.googleapis.com/auth/spreadsheets";

            /// <summary>View your Google Spreadsheets</summary>
            public static string SpreadsheetsReadonly = "https://www.googleapis.com/auth/spreadsheets.readonly";

        }



        private readonly SpreadsheetsResource spreadsheets;

        /// <summary>Gets the Spreadsheets resource.</summary>
        public virtual SpreadsheetsResource Spreadsheets
        {
            get { return spreadsheets; }
        }
    }

    ///<summary>A base abstract class for Sheets requests.</summary>
    public abstract class SheetsBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new SheetsBaseServiceRequest instance.</summary>
        protected SheetsBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes Sheets parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "spreadsheets" collection of methods.</summary>
    public class SpreadsheetsResource
    {
        private const string Resource = "spreadsheets";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public SpreadsheetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            sheets = new SheetsResource(service);
            values = new ValuesResource(service);

        }

        private readonly SheetsResource sheets;

        /// <summary>Gets the Sheets resource.</summary>
        public virtual SheetsResource Sheets
        {
            get { return sheets; }
        }

        /// <summary>The "sheets" collection of methods.</summary>
        public class SheetsResource
        {
            private const string Resource = "sheets";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public SheetsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Copies a single sheet from a spreadsheet to another spreadsheet. Returns the properties of the
            /// newly created sheet.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="spreadsheetId">The ID of the spreadsheet containing the sheet to copy.</param>
            /// <param
            /// name="sheetId">The ID of the sheet to copy.</param>
            public virtual CopyToRequest CopyTo(Google.Apis.Sheets.v4.Data.CopySheetToAnotherSpreadsheetRequest body, string spreadsheetId, int sheetId)
            {
                return new CopyToRequest(service, body, spreadsheetId, sheetId);
            }

            /// <summary>Copies a single sheet from a spreadsheet to another spreadsheet. Returns the properties of the
            /// newly created sheet.</summary>
            public class CopyToRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.SheetProperties>
            {
                /// <summary>Constructs a new CopyTo request.</summary>
                public CopyToRequest(Google.Apis.Services.IClientService service, Google.Apis.Sheets.v4.Data.CopySheetToAnotherSpreadsheetRequest body, string spreadsheetId, int sheetId)
                    : base(service)
                {
                    SpreadsheetId = spreadsheetId;
                    SheetId = sheetId;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The ID of the spreadsheet containing the sheet to copy.</summary>
                [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string SpreadsheetId { get; private set; }

                /// <summary>The ID of the sheet to copy.</summary>
                [Google.Apis.Util.RequestParameterAttribute("sheetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual int SheetId { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Sheets.v4.Data.CopySheetToAnotherSpreadsheetRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "copyTo"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v4/spreadsheets/{spreadsheetId}/sheets/{sheetId}:copyTo"; }
                }

                /// <summary>Initializes CopyTo parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "spreadsheetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "spreadsheetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "sheetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "sheetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }
        private readonly ValuesResource values;

        /// <summary>Gets the Values resource.</summary>
        public virtual ValuesResource Values
        {
            get { return values; }
        }

        /// <summary>The "values" collection of methods.</summary>
        public class ValuesResource
        {
            private const string Resource = "values";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public ValuesResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Appends values to a spreadsheet. The input range is used to search for existing data and find a
            /// "table" within that range. Values will be appended to the next row of the table, starting with the first
            /// column of the table. See the [guide](/sheets/api/guides/values#appending_values) and [sample
            /// code](/sheets/api/samples/writing#append_values) for specific details of how tables are detected and
            /// data is appended.
            ///
            /// The caller must specify the spreadsheet ID, range, and a valueInputOption.  The `valueInputOption` only
            /// controls how the input data will be added to the sheet (column-wise or row-wise), it does not influence
            /// what cell the data starts being written to.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="spreadsheetId">The ID of the spreadsheet to update.</param>
            /// <param name="range">The A1 notation
            /// of a range to search for a logical table of data. Values will be appended after the last row of the
            /// table.</param>
            public virtual AppendRequest Append(Google.Apis.Sheets.v4.Data.ValueRange body, string spreadsheetId, string range)
            {
                return new AppendRequest(service, body, spreadsheetId, range);
            }

            /// <summary>Appends values to a spreadsheet. The input range is used to search for existing data and find a
            /// "table" within that range. Values will be appended to the next row of the table, starting with the first
            /// column of the table. See the [guide](/sheets/api/guides/values#appending_values) and [sample
            /// code](/sheets/api/samples/writing#append_values) for specific details of how tables are detected and
            /// data is appended.
            ///
            /// The caller must specify the spreadsheet ID, range, and a valueInputOption.  The `valueInputOption` only
            /// controls how the input data will be added to the sheet (column-wise or row-wise), it does not influence
            /// what cell the data starts being written to.</summary>
            public class AppendRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.AppendValuesResponse>
            {
                /// <summary>Constructs a new Append request.</summary>
                public AppendRequest(Google.Apis.Services.IClientService service, Google.Apis.Sheets.v4.Data.ValueRange body, string spreadsheetId, string range)
                    : base(service)
                {
                    SpreadsheetId = spreadsheetId;
                    Range = range;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The ID of the spreadsheet to update.</summary>
                [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string SpreadsheetId { get; private set; }

                /// <summary>The A1 notation of a range to search for a logical table of data. Values will be appended
                /// after the last row of the table.</summary>
                [Google.Apis.Util.RequestParameterAttribute("range", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Range { get; private set; }

                /// <summary>Determines if the update response should include the values of the cells that were
                /// appended. By default, responses do not include the updated values.</summary>
                [Google.Apis.Util.RequestParameterAttribute("includeValuesInResponse", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<bool> IncludeValuesInResponse { get; set; }

                /// <summary>Determines how values in the response should be rendered. The default render option is
                /// ValueRenderOption.FORMATTED_VALUE.</summary>
                [Google.Apis.Util.RequestParameterAttribute("responseValueRenderOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ResponseValueRenderOptionEnum> ResponseValueRenderOption { get; set; }

                /// <summary>Determines how values in the response should be rendered. The default render option is
                /// ValueRenderOption.FORMATTED_VALUE.</summary>
                public enum ResponseValueRenderOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("FORMATTED_VALUE")]
                    FORMATTEDVALUE,
                    [Google.Apis.Util.StringValueAttribute("UNFORMATTED_VALUE")]
                    UNFORMATTEDVALUE,
                    [Google.Apis.Util.StringValueAttribute("FORMULA")]
                    FORMULA,
                }

                /// <summary>How the input data should be inserted.</summary>
                [Google.Apis.Util.RequestParameterAttribute("insertDataOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<InsertDataOptionEnum> InsertDataOption { get; set; }

                /// <summary>How the input data should be inserted.</summary>
                public enum InsertDataOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("OVERWRITE")]
                    OVERWRITE,
                    [Google.Apis.Util.StringValueAttribute("INSERT_ROWS")]
                    INSERTROWS,
                }

                /// <summary>How the input data should be interpreted.</summary>
                [Google.Apis.Util.RequestParameterAttribute("valueInputOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ValueInputOptionEnum> ValueInputOption { get; set; }

                /// <summary>How the input data should be interpreted.</summary>
                public enum ValueInputOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("INPUT_VALUE_OPTION_UNSPECIFIED")]
                    INPUTVALUEOPTIONUNSPECIFIED,
                    [Google.Apis.Util.StringValueAttribute("RAW")]
                    RAW,
                    [Google.Apis.Util.StringValueAttribute("USER_ENTERED")]
                    USERENTERED,
                }

                /// <summary>Determines how dates, times, and durations in the response should be rendered. This is
                /// ignored if response_value_render_option is FORMATTED_VALUE. The default dateTime render option is
                /// [DateTimeRenderOption.SERIAL_NUMBER].</summary>
                [Google.Apis.Util.RequestParameterAttribute("responseDateTimeRenderOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ResponseDateTimeRenderOptionEnum> ResponseDateTimeRenderOption { get; set; }

                /// <summary>Determines how dates, times, and durations in the response should be rendered. This is
                /// ignored if response_value_render_option is FORMATTED_VALUE. The default dateTime render option is
                /// [DateTimeRenderOption.SERIAL_NUMBER].</summary>
                public enum ResponseDateTimeRenderOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("SERIAL_NUMBER")]
                    SERIALNUMBER,
                    [Google.Apis.Util.StringValueAttribute("FORMATTED_STRING")]
                    FORMATTEDSTRING,
                }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Sheets.v4.Data.ValueRange Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "append"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v4/spreadsheets/{spreadsheetId}/values/{range}:append"; }
                }

                /// <summary>Initializes Append parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "spreadsheetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "spreadsheetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "range", new Google.Apis.Discovery.Parameter
                        {
                            Name = "range",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "includeValuesInResponse", new Google.Apis.Discovery.Parameter
                        {
                            Name = "includeValuesInResponse",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "responseValueRenderOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "responseValueRenderOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "insertDataOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "insertDataOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "valueInputOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "valueInputOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "responseDateTimeRenderOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "responseDateTimeRenderOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Clears one or more ranges of values from a spreadsheet. The caller must specify the spreadsheet
            /// ID and one or more ranges. Only values are cleared -- all other properties of the cell (such as
            /// formatting, data validation, etc..) are kept.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="spreadsheetId">The ID of the spreadsheet to update.</param>
            public virtual BatchClearRequest BatchClear(Google.Apis.Sheets.v4.Data.BatchClearValuesRequest body, string spreadsheetId)
            {
                return new BatchClearRequest(service, body, spreadsheetId);
            }

            /// <summary>Clears one or more ranges of values from a spreadsheet. The caller must specify the spreadsheet
            /// ID and one or more ranges. Only values are cleared -- all other properties of the cell (such as
            /// formatting, data validation, etc..) are kept.</summary>
            public class BatchClearRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.BatchClearValuesResponse>
            {
                /// <summary>Constructs a new BatchClear request.</summary>
                public BatchClearRequest(Google.Apis.Services.IClientService service, Google.Apis.Sheets.v4.Data.BatchClearValuesRequest body, string spreadsheetId)
                    : base(service)
                {
                    SpreadsheetId = spreadsheetId;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The ID of the spreadsheet to update.</summary>
                [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string SpreadsheetId { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Sheets.v4.Data.BatchClearValuesRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "batchClear"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v4/spreadsheets/{spreadsheetId}/values:batchClear"; }
                }

                /// <summary>Initializes BatchClear parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "spreadsheetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "spreadsheetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Returns one or more ranges of values from a spreadsheet. The caller must specify the
            /// spreadsheet ID and one or more ranges.</summary>
            /// <param name="spreadsheetId">The ID of the spreadsheet to retrieve data from.</param>
            public virtual BatchGetRequest BatchGet(string spreadsheetId)
            {
                return new BatchGetRequest(service, spreadsheetId);
            }

            /// <summary>Returns one or more ranges of values from a spreadsheet. The caller must specify the
            /// spreadsheet ID and one or more ranges.</summary>
            public class BatchGetRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.BatchGetValuesResponse>
            {
                /// <summary>Constructs a new BatchGet request.</summary>
                public BatchGetRequest(Google.Apis.Services.IClientService service, string spreadsheetId)
                    : base(service)
                {
                    SpreadsheetId = spreadsheetId;
                    InitParameters();
                }


                /// <summary>The ID of the spreadsheet to retrieve data from.</summary>
                [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string SpreadsheetId { get; private set; }

                /// <summary>The A1 notation of the values to retrieve.</summary>
                [Google.Apis.Util.RequestParameterAttribute("ranges", Google.Apis.Util.RequestParameterType.Query)]
                public virtual Google.Apis.Util.Repeatable<string> Ranges { get; set; }

                /// <summary>The major dimension that results should use.
                ///
                /// For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then requesting
                /// `range=A1:B2,majorDimension=ROWS` will return `[[1,2],[3,4]]`, whereas requesting
                /// `range=A1:B2,majorDimension=COLUMNS` will return `[[1,3],[2,4]]`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("majorDimension", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<MajorDimensionEnum> MajorDimension { get; set; }

                /// <summary>The major dimension that results should use.
                ///
                /// For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then requesting
                /// `range=A1:B2,majorDimension=ROWS` will return `[[1,2],[3,4]]`, whereas requesting
                /// `range=A1:B2,majorDimension=COLUMNS` will return `[[1,3],[2,4]]`.</summary>
                public enum MajorDimensionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("DIMENSION_UNSPECIFIED")]
                    DIMENSIONUNSPECIFIED,
                    [Google.Apis.Util.StringValueAttribute("ROWS")]
                    ROWS,
                    [Google.Apis.Util.StringValueAttribute("COLUMNS")]
                    COLUMNS,
                }

                /// <summary>How values should be represented in the output. The default render option is
                /// ValueRenderOption.FORMATTED_VALUE.</summary>
                [Google.Apis.Util.RequestParameterAttribute("valueRenderOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ValueRenderOptionEnum> ValueRenderOption { get; set; }

                /// <summary>How values should be represented in the output. The default render option is
                /// ValueRenderOption.FORMATTED_VALUE.</summary>
                public enum ValueRenderOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("FORMATTED_VALUE")]
                    FORMATTEDVALUE,
                    [Google.Apis.Util.StringValueAttribute("UNFORMATTED_VALUE")]
                    UNFORMATTEDVALUE,
                    [Google.Apis.Util.StringValueAttribute("FORMULA")]
                    FORMULA,
                }

                /// <summary>How dates, times, and durations should be represented in the output. This is ignored if
                /// value_render_option is FORMATTED_VALUE. The default dateTime render option is
                /// [DateTimeRenderOption.SERIAL_NUMBER].</summary>
                [Google.Apis.Util.RequestParameterAttribute("dateTimeRenderOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<DateTimeRenderOptionEnum> DateTimeRenderOption { get; set; }

                /// <summary>How dates, times, and durations should be represented in the output. This is ignored if
                /// value_render_option is FORMATTED_VALUE. The default dateTime render option is
                /// [DateTimeRenderOption.SERIAL_NUMBER].</summary>
                public enum DateTimeRenderOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("SERIAL_NUMBER")]
                    SERIALNUMBER,
                    [Google.Apis.Util.StringValueAttribute("FORMATTED_STRING")]
                    FORMATTEDSTRING,
                }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "batchGet"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v4/spreadsheets/{spreadsheetId}/values:batchGet"; }
                }

                /// <summary>Initializes BatchGet parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "spreadsheetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "spreadsheetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "ranges", new Google.Apis.Discovery.Parameter
                        {
                            Name = "ranges",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "majorDimension", new Google.Apis.Discovery.Parameter
                        {
                            Name = "majorDimension",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "valueRenderOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "valueRenderOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "dateTimeRenderOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "dateTimeRenderOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Sets values in one or more ranges of a spreadsheet. The caller must specify the spreadsheet ID,
            /// a valueInputOption, and one or more ValueRanges.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="spreadsheetId">The ID of the spreadsheet to update.</param>
            public virtual BatchUpdateRequest BatchUpdate(Google.Apis.Sheets.v4.Data.BatchUpdateValuesRequest body, string spreadsheetId)
            {
                return new BatchUpdateRequest(service, body, spreadsheetId);
            }

            /// <summary>Sets values in one or more ranges of a spreadsheet. The caller must specify the spreadsheet ID,
            /// a valueInputOption, and one or more ValueRanges.</summary>
            public class BatchUpdateRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.BatchUpdateValuesResponse>
            {
                /// <summary>Constructs a new BatchUpdate request.</summary>
                public BatchUpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Sheets.v4.Data.BatchUpdateValuesRequest body, string spreadsheetId)
                    : base(service)
                {
                    SpreadsheetId = spreadsheetId;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The ID of the spreadsheet to update.</summary>
                [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string SpreadsheetId { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Sheets.v4.Data.BatchUpdateValuesRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "batchUpdate"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v4/spreadsheets/{spreadsheetId}/values:batchUpdate"; }
                }

                /// <summary>Initializes BatchUpdate parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "spreadsheetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "spreadsheetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Clears values from a spreadsheet. The caller must specify the spreadsheet ID and range. Only
            /// values are cleared -- all other properties of the cell (such as formatting, data validation, etc..) are
            /// kept.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="spreadsheetId">The ID of the spreadsheet to update.</param>
            /// <param name="range">The A1 notation
            /// of the values to clear.</param>
            public virtual ClearRequest Clear(Google.Apis.Sheets.v4.Data.ClearValuesRequest body, string spreadsheetId, string range)
            {
                return new ClearRequest(service, body, spreadsheetId, range);
            }

            /// <summary>Clears values from a spreadsheet. The caller must specify the spreadsheet ID and range. Only
            /// values are cleared -- all other properties of the cell (such as formatting, data validation, etc..) are
            /// kept.</summary>
            public class ClearRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.ClearValuesResponse>
            {
                /// <summary>Constructs a new Clear request.</summary>
                public ClearRequest(Google.Apis.Services.IClientService service, Google.Apis.Sheets.v4.Data.ClearValuesRequest body, string spreadsheetId, string range)
                    : base(service)
                {
                    SpreadsheetId = spreadsheetId;
                    Range = range;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The ID of the spreadsheet to update.</summary>
                [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string SpreadsheetId { get; private set; }

                /// <summary>The A1 notation of the values to clear.</summary>
                [Google.Apis.Util.RequestParameterAttribute("range", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Range { get; private set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Sheets.v4.Data.ClearValuesRequest Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "clear"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "POST"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v4/spreadsheets/{spreadsheetId}/values/{range}:clear"; }
                }

                /// <summary>Initializes Clear parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "spreadsheetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "spreadsheetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "range", new Google.Apis.Discovery.Parameter
                        {
                            Name = "range",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Returns a range of values from a spreadsheet. The caller must specify the spreadsheet ID and a
            /// range.</summary>
            /// <param name="spreadsheetId">The ID of the spreadsheet to retrieve data from.</param>
            /// <param name="range">The
            /// A1 notation of the values to retrieve.</param>
            public virtual GetRequest Get(string spreadsheetId, string range)
            {
                return new GetRequest(service, spreadsheetId, range);
            }

            /// <summary>Returns a range of values from a spreadsheet. The caller must specify the spreadsheet ID and a
            /// range.</summary>
            public class GetRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.ValueRange>
            {
                /// <summary>Constructs a new Get request.</summary>
                public GetRequest(Google.Apis.Services.IClientService service, string spreadsheetId, string range)
                    : base(service)
                {
                    SpreadsheetId = spreadsheetId;
                    Range = range;
                    InitParameters();
                }


                /// <summary>The ID of the spreadsheet to retrieve data from.</summary>
                [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string SpreadsheetId { get; private set; }

                /// <summary>The A1 notation of the values to retrieve.</summary>
                [Google.Apis.Util.RequestParameterAttribute("range", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Range { get; private set; }

                /// <summary>How values should be represented in the output. The default render option is
                /// ValueRenderOption.FORMATTED_VALUE.</summary>
                [Google.Apis.Util.RequestParameterAttribute("valueRenderOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ValueRenderOptionEnum> ValueRenderOption { get; set; }

                /// <summary>How values should be represented in the output. The default render option is
                /// ValueRenderOption.FORMATTED_VALUE.</summary>
                public enum ValueRenderOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("FORMATTED_VALUE")]
                    FORMATTEDVALUE,
                    [Google.Apis.Util.StringValueAttribute("UNFORMATTED_VALUE")]
                    UNFORMATTEDVALUE,
                    [Google.Apis.Util.StringValueAttribute("FORMULA")]
                    FORMULA,
                }

                /// <summary>How dates, times, and durations should be represented in the output. This is ignored if
                /// value_render_option is FORMATTED_VALUE. The default dateTime render option is
                /// [DateTimeRenderOption.SERIAL_NUMBER].</summary>
                [Google.Apis.Util.RequestParameterAttribute("dateTimeRenderOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<DateTimeRenderOptionEnum> DateTimeRenderOption { get; set; }

                /// <summary>How dates, times, and durations should be represented in the output. This is ignored if
                /// value_render_option is FORMATTED_VALUE. The default dateTime render option is
                /// [DateTimeRenderOption.SERIAL_NUMBER].</summary>
                public enum DateTimeRenderOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("SERIAL_NUMBER")]
                    SERIALNUMBER,
                    [Google.Apis.Util.StringValueAttribute("FORMATTED_STRING")]
                    FORMATTEDSTRING,
                }

                /// <summary>The major dimension that results should use.
                ///
                /// For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then requesting
                /// `range=A1:B2,majorDimension=ROWS` will return `[[1,2],[3,4]]`, whereas requesting
                /// `range=A1:B2,majorDimension=COLUMNS` will return `[[1,3],[2,4]]`.</summary>
                [Google.Apis.Util.RequestParameterAttribute("majorDimension", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<MajorDimensionEnum> MajorDimension { get; set; }

                /// <summary>The major dimension that results should use.
                ///
                /// For example, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then requesting
                /// `range=A1:B2,majorDimension=ROWS` will return `[[1,2],[3,4]]`, whereas requesting
                /// `range=A1:B2,majorDimension=COLUMNS` will return `[[1,3],[2,4]]`.</summary>
                public enum MajorDimensionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("DIMENSION_UNSPECIFIED")]
                    DIMENSIONUNSPECIFIED,
                    [Google.Apis.Util.StringValueAttribute("ROWS")]
                    ROWS,
                    [Google.Apis.Util.StringValueAttribute("COLUMNS")]
                    COLUMNS,
                }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "get"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v4/spreadsheets/{spreadsheetId}/values/{range}"; }
                }

                /// <summary>Initializes Get parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "spreadsheetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "spreadsheetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "range", new Google.Apis.Discovery.Parameter
                        {
                            Name = "range",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "valueRenderOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "valueRenderOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "dateTimeRenderOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "dateTimeRenderOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "majorDimension", new Google.Apis.Discovery.Parameter
                        {
                            Name = "majorDimension",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }

            /// <summary>Sets values in a range of a spreadsheet. The caller must specify the spreadsheet ID, range, and
            /// a valueInputOption.</summary>
            /// <param name="body">The body of the request.</param>
            /// <param name="spreadsheetId">The ID of the spreadsheet to update.</param>
            /// <param name="range">The A1 notation
            /// of the values to update.</param>
            public virtual UpdateRequest Update(Google.Apis.Sheets.v4.Data.ValueRange body, string spreadsheetId, string range)
            {
                return new UpdateRequest(service, body, spreadsheetId, range);
            }

            /// <summary>Sets values in a range of a spreadsheet. The caller must specify the spreadsheet ID, range, and
            /// a valueInputOption.</summary>
            public class UpdateRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.UpdateValuesResponse>
            {
                /// <summary>Constructs a new Update request.</summary>
                public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Sheets.v4.Data.ValueRange body, string spreadsheetId, string range)
                    : base(service)
                {
                    SpreadsheetId = spreadsheetId;
                    Range = range;
                    Body = body;
                    InitParameters();
                }


                /// <summary>The ID of the spreadsheet to update.</summary>
                [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string SpreadsheetId { get; private set; }

                /// <summary>The A1 notation of the values to update.</summary>
                [Google.Apis.Util.RequestParameterAttribute("range", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string Range { get; private set; }

                /// <summary>Determines how values in the response should be rendered. The default render option is
                /// ValueRenderOption.FORMATTED_VALUE.</summary>
                [Google.Apis.Util.RequestParameterAttribute("responseValueRenderOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ResponseValueRenderOptionEnum> ResponseValueRenderOption { get; set; }

                /// <summary>Determines how values in the response should be rendered. The default render option is
                /// ValueRenderOption.FORMATTED_VALUE.</summary>
                public enum ResponseValueRenderOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("FORMATTED_VALUE")]
                    FORMATTEDVALUE,
                    [Google.Apis.Util.StringValueAttribute("UNFORMATTED_VALUE")]
                    UNFORMATTEDVALUE,
                    [Google.Apis.Util.StringValueAttribute("FORMULA")]
                    FORMULA,
                }

                /// <summary>How the input data should be interpreted.</summary>
                [Google.Apis.Util.RequestParameterAttribute("valueInputOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ValueInputOptionEnum> ValueInputOption { get; set; }

                /// <summary>How the input data should be interpreted.</summary>
                public enum ValueInputOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("INPUT_VALUE_OPTION_UNSPECIFIED")]
                    INPUTVALUEOPTIONUNSPECIFIED,
                    [Google.Apis.Util.StringValueAttribute("RAW")]
                    RAW,
                    [Google.Apis.Util.StringValueAttribute("USER_ENTERED")]
                    USERENTERED,
                }

                /// <summary>Determines how dates, times, and durations in the response should be rendered. This is
                /// ignored if response_value_render_option is FORMATTED_VALUE. The default dateTime render option is
                /// [DateTimeRenderOption.SERIAL_NUMBER].</summary>
                [Google.Apis.Util.RequestParameterAttribute("responseDateTimeRenderOption", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<ResponseDateTimeRenderOptionEnum> ResponseDateTimeRenderOption { get; set; }

                /// <summary>Determines how dates, times, and durations in the response should be rendered. This is
                /// ignored if response_value_render_option is FORMATTED_VALUE. The default dateTime render option is
                /// [DateTimeRenderOption.SERIAL_NUMBER].</summary>
                public enum ResponseDateTimeRenderOptionEnum
                {
                    [Google.Apis.Util.StringValueAttribute("SERIAL_NUMBER")]
                    SERIALNUMBER,
                    [Google.Apis.Util.StringValueAttribute("FORMATTED_STRING")]
                    FORMATTEDSTRING,
                }

                /// <summary>Determines if the update response should include the values of the cells that were updated.
                /// By default, responses do not include the updated values. If the range to write was larger than than
                /// the range actually written, the response will include all values in the requested range (excluding
                /// trailing empty rows and columns).</summary>
                [Google.Apis.Util.RequestParameterAttribute("includeValuesInResponse", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<bool> IncludeValuesInResponse { get; set; }


                /// <summary>Gets or sets the body of this request.</summary>
                Google.Apis.Sheets.v4.Data.ValueRange Body { get; set; }

                ///<summary>Returns the body of the request.</summary>
                protected override object GetBody() { return Body; }

                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "update"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "PUT"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v4/spreadsheets/{spreadsheetId}/values/{range}"; }
                }

                /// <summary>Initializes Update parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "spreadsheetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "spreadsheetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "range", new Google.Apis.Discovery.Parameter
                        {
                            Name = "range",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "responseValueRenderOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "responseValueRenderOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "valueInputOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "valueInputOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "responseDateTimeRenderOption", new Google.Apis.Discovery.Parameter
                        {
                            Name = "responseDateTimeRenderOption",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "includeValuesInResponse", new Google.Apis.Discovery.Parameter
                        {
                            Name = "includeValuesInResponse",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Applies one or more updates to the spreadsheet.
        ///
        /// Each request is validated before being applied. If any request is not valid then the entire request will
        /// fail and nothing will be applied.
        ///
        /// Some requests have replies to give you some information about how they are applied. The replies will mirror
        /// the requests.  For example, if you applied 4 updates and the 3rd one had a reply, then the response will
        /// have 2 empty replies, the actual reply, and another empty reply, in that order.
        ///
        /// Due to the collaborative nature of spreadsheets, it is not guaranteed that the spreadsheet will reflect
        /// exactly your changes after this completes, however it is guaranteed that the updates in the request will be
        /// applied together atomically. Your changes may be altered with respect to collaborator changes. If there are
        /// no collaborators, the spreadsheet should reflect your changes.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="spreadsheetId">The spreadsheet to apply the updates to.</param>
        public virtual BatchUpdateRequest BatchUpdate(Google.Apis.Sheets.v4.Data.BatchUpdateSpreadsheetRequest body, string spreadsheetId)
        {
            return new BatchUpdateRequest(service, body, spreadsheetId);
        }

        /// <summary>Applies one or more updates to the spreadsheet.
        ///
        /// Each request is validated before being applied. If any request is not valid then the entire request will
        /// fail and nothing will be applied.
        ///
        /// Some requests have replies to give you some information about how they are applied. The replies will mirror
        /// the requests.  For example, if you applied 4 updates and the 3rd one had a reply, then the response will
        /// have 2 empty replies, the actual reply, and another empty reply, in that order.
        ///
        /// Due to the collaborative nature of spreadsheets, it is not guaranteed that the spreadsheet will reflect
        /// exactly your changes after this completes, however it is guaranteed that the updates in the request will be
        /// applied together atomically. Your changes may be altered with respect to collaborator changes. If there are
        /// no collaborators, the spreadsheet should reflect your changes.</summary>
        public class BatchUpdateRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.BatchUpdateSpreadsheetResponse>
        {
            /// <summary>Constructs a new BatchUpdate request.</summary>
            public BatchUpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Sheets.v4.Data.BatchUpdateSpreadsheetRequest body, string spreadsheetId)
                : base(service)
            {
                SpreadsheetId = spreadsheetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The spreadsheet to apply the updates to.</summary>
            [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string SpreadsheetId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Sheets.v4.Data.BatchUpdateSpreadsheetRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "batchUpdate"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v4/spreadsheets/{spreadsheetId}:batchUpdate"; }
            }

            /// <summary>Initializes BatchUpdate parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "spreadsheetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "spreadsheetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Creates a spreadsheet, returning the newly created spreadsheet.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Sheets.v4.Data.Spreadsheet body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a spreadsheet, returning the newly created spreadsheet.</summary>
        public class CreateRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.Spreadsheet>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Sheets.v4.Data.Spreadsheet body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Sheets.v4.Data.Spreadsheet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v4/spreadsheets"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Returns the spreadsheet at the given ID. The caller must specify the spreadsheet ID.
        ///
        /// By default, data within grids will not be returned. You can include grid data one of two ways:
        ///
        /// * Specify a field mask listing your desired fields using the `fields` URL parameter in HTTP
        ///
        /// * Set the includeGridData URL parameter to true.  If a field mask is set, the `includeGridData` parameter is
        /// ignored
        ///
        /// For large spreadsheets, it is recommended to retrieve only the specific fields of the spreadsheet that you
        /// want.
        ///
        /// To retrieve only subsets of the spreadsheet, use the ranges URL parameter. Multiple ranges can be specified.
        /// Limiting the range will return only the portions of the spreadsheet that intersect the requested ranges.
        /// Ranges are specified using A1 notation.</summary>
        /// <param name="spreadsheetId">The spreadsheet to request.</param>
        public virtual GetRequest Get(string spreadsheetId)
        {
            return new GetRequest(service, spreadsheetId);
        }

        /// <summary>Returns the spreadsheet at the given ID. The caller must specify the spreadsheet ID.
        ///
        /// By default, data within grids will not be returned. You can include grid data one of two ways:
        ///
        /// * Specify a field mask listing your desired fields using the `fields` URL parameter in HTTP
        ///
        /// * Set the includeGridData URL parameter to true.  If a field mask is set, the `includeGridData` parameter is
        /// ignored
        ///
        /// For large spreadsheets, it is recommended to retrieve only the specific fields of the spreadsheet that you
        /// want.
        ///
        /// To retrieve only subsets of the spreadsheet, use the ranges URL parameter. Multiple ranges can be specified.
        /// Limiting the range will return only the portions of the spreadsheet that intersect the requested ranges.
        /// Ranges are specified using A1 notation.</summary>
        public class GetRequest : SheetsBaseServiceRequest<Google.Apis.Sheets.v4.Data.Spreadsheet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string spreadsheetId)
                : base(service)
            {
                SpreadsheetId = spreadsheetId;
                InitParameters();
            }


            /// <summary>The spreadsheet to request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("spreadsheetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string SpreadsheetId { get; private set; }

            /// <summary>The ranges to retrieve from the spreadsheet.</summary>
            [Google.Apis.Util.RequestParameterAttribute("ranges", Google.Apis.Util.RequestParameterType.Query)]
            public virtual Google.Apis.Util.Repeatable<string> Ranges { get; set; }

            /// <summary>True if grid data should be returned. This parameter is ignored if a field mask was set in the
            /// request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("includeGridData", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<bool> IncludeGridData { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v4/spreadsheets/{spreadsheetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "spreadsheetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "spreadsheetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "ranges", new Google.Apis.Discovery.Parameter
                    {
                        Name = "ranges",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "includeGridData", new Google.Apis.Discovery.Parameter
                    {
                        Name = "includeGridData",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.Sheets.v4.Data
{    

    /// <summary>Adds a new banded range to the spreadsheet.</summary>
    public class AddBandingRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The banded range to add. The bandedRangeId field is optional; if one is not set, an id will be
        /// randomly generated. (It is an error to specify the ID of a range that already exists.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bandedRange")]
        public virtual BandedRange BandedRange { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of adding a banded range.</summary>
    public class AddBandingResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The banded range that was added.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bandedRange")]
        public virtual BandedRange BandedRange { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Adds a chart to a sheet in the spreadsheet.</summary>
    public class AddChartRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The chart that should be added to the spreadsheet, including the position where it should be
        /// placed. The chartId field is optional; if one is not set, an id will be randomly generated. (It is an error
        /// to specify the ID of a chart that already exists.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("chart")]
        public virtual EmbeddedChart Chart { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of adding a chart to a spreadsheet.</summary>
    public class AddChartResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The newly added chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("chart")]
        public virtual EmbeddedChart Chart { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Adds a new conditional format rule at the given index. All subsequent rules' indexes are
    /// incremented.</summary>
    public class AddConditionalFormatRuleRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The zero-based index where the rule should be inserted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("index")]
        public virtual System.Nullable<int> Index { get; set; } 

        /// <summary>The rule to add.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rule")]
        public virtual ConditionalFormatRule Rule { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Adds a filter view.</summary>
    public class AddFilterViewRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The filter to add. The filterViewId field is optional; if one is not set, an id will be randomly
        /// generated. (It is an error to specify the ID of a filter that already exists.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filter")]
        public virtual FilterView Filter { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of adding a filter view.</summary>
    public class AddFilterViewResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The newly added filter view.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filter")]
        public virtual FilterView Filter { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Adds a named range to the spreadsheet.</summary>
    public class AddNamedRangeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The named range to add. The namedRangeId field is optional; if one is not set, an id will be
        /// randomly generated. (It is an error to specify the ID of a range that already exists.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namedRange")]
        public virtual NamedRange NamedRange { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of adding a named range.</summary>
    public class AddNamedRangeResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The named range to add.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namedRange")]
        public virtual NamedRange NamedRange { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Adds a new protected range.</summary>
    public class AddProtectedRangeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The protected range to be added. The protectedRangeId field is optional; if one is not set, an id
        /// will be randomly generated. (It is an error to specify the ID of a range that already exists.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("protectedRange")]
        public virtual ProtectedRange ProtectedRange { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of adding a new protected range.</summary>
    public class AddProtectedRangeResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The newly added protected range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("protectedRange")]
        public virtual ProtectedRange ProtectedRange { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Adds a new sheet. When a sheet is added at a given index, all subsequent sheets' indexes are
    /// incremented. To add an object sheet, use AddChartRequest instead and specify EmbeddedObjectPosition.sheetId or
    /// EmbeddedObjectPosition.newSheet.</summary>
    public class AddSheetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The properties the new sheet should have. All properties are optional. The sheetId field is
        /// optional; if one is not set, an id will be randomly generated. (It is an error to specify the ID of a sheet
        /// that already exists.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual SheetProperties Properties { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of adding a sheet.</summary>
    public class AddSheetResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The properties of the newly added sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual SheetProperties Properties { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Adds new cells after the last row with data in a sheet, inserting new rows into the sheet if
    /// necessary.</summary>
    public class AppendCellsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fields of CellData that should be updated. At least one field must be specified. The root is
        /// the CellData; 'row.values.' should not be specified. A single `"*"` can be used as short-hand for listing
        /// every field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>The data to append.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rows")]
        public virtual System.Collections.Generic.IList<RowData> Rows { get; set; } 

        /// <summary>The sheet ID to append the data to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Appends rows or columns to the end of a sheet.</summary>
    public class AppendDimensionRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether rows or columns should be appended.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dimension")]
        public virtual string Dimension { get; set; } 

        /// <summary>The number of rows or columns to append.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("length")]
        public virtual System.Nullable<int> Length { get; set; } 

        /// <summary>The sheet to append rows or columns to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response when updating a range of values in a spreadsheet.</summary>
    public class AppendValuesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The spreadsheet the updates were applied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spreadsheetId")]
        public virtual string SpreadsheetId { get; set; } 

        /// <summary>The range (in A1 notation) of the table that values are being appended to (before the values were
        /// appended). Empty if no table was found.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tableRange")]
        public virtual string TableRange { get; set; } 

        /// <summary>Information about the updates that were applied.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updates")]
        public virtual UpdateValuesResponse Updates { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Fills in more data based on existing data.</summary>
    public class AutoFillRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The range to autofill. This will examine the range and detect the location that has data and
        /// automatically fill that data in to the rest of the range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The source and destination areas to autofill. This explicitly lists the source of the autofill and
        /// where to extend that data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceAndDestination")]
        public virtual SourceAndDestination SourceAndDestination { get; set; } 

        /// <summary>True if we should generate data with the "alternate" series. This differs based on the type and
        /// amount of source data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("useAlternateSeries")]
        public virtual System.Nullable<bool> UseAlternateSeries { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Automatically resizes one or more dimensions based on the contents of the cells in that
    /// dimension.</summary>
    public class AutoResizeDimensionsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dimensions to automatically resize. Only COLUMNS are supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dimensions")]
        public virtual DimensionRange Dimensions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A banded (alternating colors) range in a sheet.</summary>
    public class BandedRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The id of the banded range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bandedRangeId")]
        public virtual System.Nullable<int> BandedRangeId { get; set; } 

        /// <summary>Properties for column bands. These properties will be applied on a column- by-column basis
        /// throughout all the columns in the range. At least one of row_properties or column_properties must be
        /// specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("columnProperties")]
        public virtual BandingProperties ColumnProperties { get; set; } 

        /// <summary>The range over which these properties are applied.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>Properties for row bands. These properties will be applied on a row-by-row basis throughout all the
        /// rows in the range. At least one of row_properties or column_properties must be specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rowProperties")]
        public virtual BandingProperties RowProperties { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Properties referring a single dimension (either row or column). If both BandedRange.row_properties and
    /// BandedRange.column_properties are set, the fill colors are applied to cells according to the following rules:
    ///
    /// * header_color and footer_color take priority over band colors. * first_band_color takes priority over
    /// second_band_color. * row_properties takes priority over column_properties.
    ///
    /// For example, the first row color takes priority over the first column color, but the first column color takes
    /// priority over the second row color. Similarly, the row header takes priority over the column header in the top
    /// left cell, but the column header takes priority over the first row color if the row header is not set.</summary>
    public class BandingProperties : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The first color that is alternating. (Required)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("firstBandColor")]
        public virtual Color FirstBandColor { get; set; } 

        /// <summary>The color of the last row or column. If this field is not set, the last row or column will be
        /// filled with either first_band_color or second_band_color, depending on the color of the previous row or
        /// column.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("footerColor")]
        public virtual Color FooterColor { get; set; } 

        /// <summary>The color of the first row or column. If this field is set, the first row or column will be filled
        /// with this color and the colors will alternate between first_band_color and second_band_color starting from
        /// the second row or column. Otherwise, the first row or column will be filled with first_band_color and the
        /// colors will proceed to alternate as they normally would.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("headerColor")]
        public virtual Color HeaderColor { get; set; } 

        /// <summary>The second color that is alternating. (Required)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("secondBandColor")]
        public virtual Color SecondBandColor { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An axis of the chart. A chart may not have more than one axis per axis position.</summary>
    public class BasicChartAxis : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The format of the title. Only valid if the axis is not associated with the domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("format")]
        public virtual TextFormat Format { get; set; } 

        /// <summary>The position of this axis.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual string Position { get; set; } 

        /// <summary>The title of this axis. If set, this overrides any title inferred from headers of the
        /// data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The domain of a chart. For example, if charting stock prices over time, this would be the
    /// date.</summary>
    public class BasicChartDomain : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The data of the domain. For example, if charting stock prices over time, this is the data
        /// representing the dates.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domain")]
        public virtual ChartData Domain { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single series of data in a chart. For example, if charting stock prices over time, multiple series
    /// may exist, one for the "Open Price", "High Price", "Low Price" and "Close Price".</summary>
    public class BasicChartSeries : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The data being visualized in this chart series.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("series")]
        public virtual ChartData Series { get; set; } 

        /// <summary>The minor axis that will specify the range of values for this series. For example, if charting
        /// stocks over time, the "Volume" series may want to be pinned to the right with the prices pinned to the left,
        /// because the scale of trading volume is different than the scale of prices. It is an error to specify an axis
        /// that isn't a valid minor axis for the chart's type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("targetAxis")]
        public virtual string TargetAxis { get; set; } 

        /// <summary>The type of this series. Valid only if the chartType is COMBO. Different types will change the way
        /// the series is visualized. Only LINE, AREA, and COLUMN are supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The specification for a basic chart.  See BasicChartType for the list of charts this
    /// supports.</summary>
    public class BasicChartSpec : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The axis on the chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("axis")]
        public virtual System.Collections.Generic.IList<BasicChartAxis> Axis { get; set; } 

        /// <summary>The type of the chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("chartType")]
        public virtual string ChartType { get; set; } 

        /// <summary>The domain of data this is charting. Only a single domain is currently supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domains")]
        public virtual System.Collections.Generic.IList<BasicChartDomain> Domains { get; set; } 

        /// <summary>The number of rows or columns in the data that are "headers". If not set, Google Sheets will guess
        /// how many rows are headers based on the data.
        ///
        /// (Note that BasicChartAxis.title may override the axis title inferred from the header values.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("headerCount")]
        public virtual System.Nullable<int> HeaderCount { get; set; } 

        /// <summary>The position of the chart legend.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("legendPosition")]
        public virtual string LegendPosition { get; set; } 

        /// <summary>The data this chart is visualizing.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("series")]
        public virtual System.Collections.Generic.IList<BasicChartSeries> Series { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The default filter associated with a sheet.</summary>
    public class BasicFilter : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The criteria for showing/hiding values per column. The map's key is the column index, and the value
        /// is the criteria for that column.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("criteria")]
        public virtual System.Collections.Generic.IDictionary<string,FilterCriteria> Criteria { get; set; } 

        /// <summary>The range the filter covers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The sort order per column. Later specifications are used when values are equal in the earlier
        /// specifications.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sortSpecs")]
        public virtual System.Collections.Generic.IList<SortSpec> SortSpecs { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The request for clearing more than one range of values in a spreadsheet.</summary>
    public class BatchClearValuesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ranges to clear, in A1 notation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ranges")]
        public virtual System.Collections.Generic.IList<string> Ranges { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response when updating a range of values in a spreadsheet.</summary>
    public class BatchClearValuesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ranges that were cleared, in A1 notation. (If the requests were for an unbounded range or a
        /// ranger larger than the bounds of the sheet, this will be the actual ranges that were cleared, bounded to the
        /// sheet's limits.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clearedRanges")]
        public virtual System.Collections.Generic.IList<string> ClearedRanges { get; set; } 

        /// <summary>The spreadsheet the updates were applied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spreadsheetId")]
        public virtual string SpreadsheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response when retrieving more than one range of values in a spreadsheet.</summary>
    public class BatchGetValuesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the spreadsheet the data was retrieved from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spreadsheetId")]
        public virtual string SpreadsheetId { get; set; } 

        /// <summary>The requested values. The order of the ValueRanges is the same as the order of the requested
        /// ranges.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valueRanges")]
        public virtual System.Collections.Generic.IList<ValueRange> ValueRanges { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The request for updating any aspect of a spreadsheet.</summary>
    public class BatchUpdateSpreadsheetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Determines if the update response should include the spreadsheet resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("includeSpreadsheetInResponse")]
        public virtual System.Nullable<bool> IncludeSpreadsheetInResponse { get; set; } 

        /// <summary>A list of updates to apply to the spreadsheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requests")]
        public virtual System.Collections.Generic.IList<Request> Requests { get; set; } 

        /// <summary>True if grid data should be returned. Meaningful only if if include_spreadsheet_response is 'true'.
        /// This parameter is ignored if a field mask was set in the request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responseIncludeGridData")]
        public virtual System.Nullable<bool> ResponseIncludeGridData { get; set; } 

        /// <summary>Limits the ranges included in the response spreadsheet. Meaningful only if
        /// include_spreadsheet_response is 'true'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responseRanges")]
        public virtual System.Collections.Generic.IList<string> ResponseRanges { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The reply for batch updating a spreadsheet.</summary>
    public class BatchUpdateSpreadsheetResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The reply of the updates.  This maps 1:1 with the updates, although replies to some requests may be
        /// empty.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("replies")]
        public virtual System.Collections.Generic.IList<Response> Replies { get; set; } 

        /// <summary>The spreadsheet the updates were applied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spreadsheetId")]
        public virtual string SpreadsheetId { get; set; } 

        /// <summary>The spreadsheet after updates were applied. This is only set if
        /// [BatchUpdateSpreadsheetRequest.include_spreadsheet_in_response] is `true`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updatedSpreadsheet")]
        public virtual Spreadsheet UpdatedSpreadsheet { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The request for updating more than one range of values in a spreadsheet.</summary>
    public class BatchUpdateValuesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The new values to apply to the spreadsheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("data")]
        public virtual System.Collections.Generic.IList<ValueRange> Data { get; set; } 

        /// <summary>Determines if the update response should include the values of the cells that were updated. By
        /// default, responses do not include the updated values. The `updatedData` field within each of the
        /// BatchUpdateValuesResponse.responses will contain the updated values. If the range to write was larger than
        /// than the range actually written, the response will include all values in the requested range (excluding
        /// trailing empty rows and columns).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("includeValuesInResponse")]
        public virtual System.Nullable<bool> IncludeValuesInResponse { get; set; } 

        /// <summary>Determines how dates, times, and durations in the response should be rendered. This is ignored if
        /// response_value_render_option is FORMATTED_VALUE. The default dateTime render option is
        /// [DateTimeRenderOption.SERIAL_NUMBER].</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responseDateTimeRenderOption")]
        public virtual string ResponseDateTimeRenderOption { get; set; } 

        /// <summary>Determines how values in the response should be rendered. The default render option is
        /// ValueRenderOption.FORMATTED_VALUE.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responseValueRenderOption")]
        public virtual string ResponseValueRenderOption { get; set; } 

        /// <summary>How the input data should be interpreted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valueInputOption")]
        public virtual string ValueInputOption { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response when updating a range of values in a spreadsheet.</summary>
    public class BatchUpdateValuesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>One UpdateValuesResponse per requested range, in the same order as the requests appeared.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("responses")]
        public virtual System.Collections.Generic.IList<UpdateValuesResponse> Responses { get; set; } 

        /// <summary>The spreadsheet the updates were applied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spreadsheetId")]
        public virtual string SpreadsheetId { get; set; } 

        /// <summary>The total number of cells updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalUpdatedCells")]
        public virtual System.Nullable<int> TotalUpdatedCells { get; set; } 

        /// <summary>The total number of columns where at least one cell in the column was updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalUpdatedColumns")]
        public virtual System.Nullable<int> TotalUpdatedColumns { get; set; } 

        /// <summary>The total number of rows where at least one cell in the row was updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalUpdatedRows")]
        public virtual System.Nullable<int> TotalUpdatedRows { get; set; } 

        /// <summary>The total number of sheets where at least one cell in the sheet was updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalUpdatedSheets")]
        public virtual System.Nullable<int> TotalUpdatedSheets { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A condition that can evaluate to true or false. BooleanConditions are used by conditional formatting,
    /// data validation, and the criteria in filters.</summary>
    public class BooleanCondition : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The type of condition.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The values of the condition. The number of supported values depends on the condition type.  Some
        /// support zero values, others one or two values, and ConditionType.ONE_OF_LIST supports an arbitrary number of
        /// values.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("values")]
        public virtual System.Collections.Generic.IList<ConditionValue> Values { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A rule that may or may not match, depending on the condition.</summary>
    public class BooleanRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The condition of the rule. If the condition evaluates to true, the format will be
        /// applied.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("condition")]
        public virtual BooleanCondition Condition { get; set; } 

        /// <summary>The format to apply. Conditional formatting can only apply a subset of formatting: bold, italic,
        /// strikethrough, foreground color & background color.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("format")]
        public virtual CellFormat Format { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A border along a cell.</summary>
    public class Border : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The color of the border.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("color")]
        public virtual Color Color { get; set; } 

        /// <summary>The style of the border.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("style")]
        public virtual string Style { get; set; } 

        /// <summary>The width of the border, in pixels. Deprecated; the width is determined by the "style"
        /// field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("width")]
        public virtual System.Nullable<int> Width { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The borders of the cell.</summary>
    public class Borders : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The bottom border of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bottom")]
        public virtual Border Bottom { get; set; } 

        /// <summary>The left border of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("left")]
        public virtual Border Left { get; set; } 

        /// <summary>The right border of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("right")]
        public virtual Border Right { get; set; } 

        /// <summary>The top border of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("top")]
        public virtual Border Top { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Data about a specific cell.</summary>
    public class CellData : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A data validation rule on the cell, if any.
        ///
        /// When writing, the new data validation rule will overwrite any prior rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dataValidation")]
        public virtual DataValidationRule DataValidation { get; set; } 

        /// <summary>The effective format being used by the cell. This includes the results of applying any conditional
        /// formatting and, if the cell contains a formula, the computed number format. If the effective format is the
        /// default format, effective format will not be written. This field is read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveFormat")]
        public virtual CellFormat EffectiveFormat { get; set; } 

        /// <summary>The effective value of the cell. For cells with formulas, this will be the calculated value.  For
        /// cells with literals, this will be the same as the user_entered_value. This field is read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effectiveValue")]
        public virtual ExtendedValue EffectiveValue { get; set; } 

        /// <summary>The formatted value of the cell. This is the value as it's shown to the user. This field is read-
        /// only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formattedValue")]
        public virtual string FormattedValue { get; set; } 

        /// <summary>A hyperlink this cell points to, if any. This field is read-only.  (To set it, use a `=HYPERLINK`
        /// formula.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hyperlink")]
        public virtual string Hyperlink { get; set; } 

        /// <summary>Any note on the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("note")]
        public virtual string Note { get; set; } 

        /// <summary>A pivot table anchored at this cell. The size of pivot table itself is computed dynamically based
        /// on its data, grouping, filters, values, etc. Only the top-left cell of the pivot table contains the pivot
        /// table definition. The other cells will contain the calculated values of the results of the pivot in their
        /// effective_value fields.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pivotTable")]
        public virtual PivotTable PivotTable { get; set; } 

        /// <summary>Runs of rich text applied to subsections of the cell.  Runs are only valid on user entered strings,
        /// not formulas, bools, or numbers. Runs start at specific indexes in the text and continue until the next run.
        /// Properties of a run will continue unless explicitly changed in a subsequent run (and properties of the first
        /// run will continue the properties of the cell unless explicitly changed).
        ///
        /// When writing, the new runs will overwrite any prior runs.  When writing a new user_entered_value, previous
        /// runs will be erased.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("textFormatRuns")]
        public virtual System.Collections.Generic.IList<TextFormatRun> TextFormatRuns { get; set; } 

        /// <summary>The format the user entered for the cell.
        ///
        /// When writing, the new format will be merged with the existing format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userEnteredFormat")]
        public virtual CellFormat UserEnteredFormat { get; set; } 

        /// <summary>The value the user entered in the cell. e.g, `1234`, `'Hello'`, or `=NOW()` Note: Dates, Times and
        /// DateTimes are represented as doubles in serial number format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userEnteredValue")]
        public virtual ExtendedValue UserEnteredValue { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The format of a cell.</summary>
    public class CellFormat : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The background color of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("backgroundColor")]
        public virtual Color BackgroundColor { get; set; } 

        /// <summary>The borders of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("borders")]
        public virtual Borders Borders { get; set; } 

        /// <summary>The horizontal alignment of the value in the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("horizontalAlignment")]
        public virtual string HorizontalAlignment { get; set; } 

        /// <summary>How a hyperlink, if it exists, should be displayed in the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hyperlinkDisplayType")]
        public virtual string HyperlinkDisplayType { get; set; } 

        /// <summary>A format describing how number values should be represented to the user.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numberFormat")]
        public virtual NumberFormat NumberFormat { get; set; } 

        /// <summary>The padding of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("padding")]
        public virtual Padding Padding { get; set; } 

        /// <summary>The direction of the text in the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("textDirection")]
        public virtual string TextDirection { get; set; } 

        /// <summary>The format of the text in the cell (unless overridden by a format run).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("textFormat")]
        public virtual TextFormat TextFormat { get; set; } 

        /// <summary>The rotation applied to text in a cell</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("textRotation")]
        public virtual TextRotation TextRotation { get; set; } 

        /// <summary>The vertical alignment of the value in the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("verticalAlignment")]
        public virtual string VerticalAlignment { get; set; } 

        /// <summary>The wrap strategy for the value in the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("wrapStrategy")]
        public virtual string WrapStrategy { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The data included in a domain or series.</summary>
    public class ChartData : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The source ranges of the data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceRange")]
        public virtual ChartSourceRange SourceRange { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Source ranges for a chart.</summary>
    public class ChartSourceRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ranges of data for a series or domain. Exactly one dimension must have a length of 1, and all
        /// sources in the list must have the same dimension with length 1. The domain (if it exists) & all series must
        /// have the same number of source ranges. If using more than one source range, then the source range at a given
        /// offset must be contiguous across the domain and series.
        ///
        /// For example, these are valid configurations:
        ///
        /// domain sources: A1:A5 series1 sources: B1:B5 series2 sources: D6:D10
        ///
        /// domain sources: A1:A5, C10:C12 series1 sources: B1:B5, D10:D12 series2 sources: C1:C5, E10:E12</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sources")]
        public virtual System.Collections.Generic.IList<GridRange> Sources { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The specifications of a chart.</summary>
    public class ChartSpec : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A basic chart specification, can be one of many kinds of charts. See BasicChartType for the list of
        /// all charts this supports.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("basicChart")]
        public virtual BasicChartSpec BasicChart { get; set; } 

        /// <summary>Determines how the charts will use hidden rows or columns.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hiddenDimensionStrategy")]
        public virtual string HiddenDimensionStrategy { get; set; } 

        /// <summary>A pie chart specification.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pieChart")]
        public virtual PieChartSpec PieChart { get; set; } 

        /// <summary>The title of the chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Clears the basic filter, if any exists on the sheet.</summary>
    public class ClearBasicFilterRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The sheet ID on which the basic filter should be cleared.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The request for clearing a range of values in a spreadsheet.</summary>
    public class ClearValuesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response when clearing a range of values in a spreadsheet.</summary>
    public class ClearValuesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The range (in A1 notation) that was cleared. (If the request was for an unbounded range or a ranger
        /// larger than the bounds of the sheet, this will be the actual range that was cleared, bounded to the sheet's
        /// limits.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clearedRange")]
        public virtual string ClearedRange { get; set; } 

        /// <summary>The spreadsheet the updates were applied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spreadsheetId")]
        public virtual string SpreadsheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Represents a color in the RGBA color space. This representation is designed for simplicity of
    /// conversion to/from color representations in various languages over compactness; for example, the fields of this
    /// representation can be trivially provided to the constructor of "java.awt.Color" in Java; it can also be
    /// trivially provided to UIColor's "+colorWithRed:green:blue:alpha" method in iOS; and, with just a little work, it
    /// can be easily formatted into a CSS "rgba()" string in JavaScript, as well. Here are some examples:
    ///
    /// Example (Java):
    ///
    /// import com.google.type.Color;
    ///
    /// // ... public static java.awt.Color fromProto(Color protocolor) { float alpha = protocolor.hasAlpha() ?
    /// protocolor.getAlpha().getValue() : 1.0;
    ///
    /// return new java.awt.Color( protocolor.getRed(), protocolor.getGreen(), protocolor.getBlue(), alpha); }
    ///
    /// public static Color toProto(java.awt.Color color) { float red = (float) color.getRed(); float green = (float)
    /// color.getGreen(); float blue = (float) color.getBlue(); float denominator = 255.0; Color.Builder resultBuilder =
    /// Color .newBuilder() .setRed(red / denominator) .setGreen(green / denominator) .setBlue(blue / denominator); int
    /// alpha = color.getAlpha(); if (alpha != 255) { result.setAlpha( FloatValue .newBuilder() .setValue(((float)
    /// alpha) / denominator) .build()); } return resultBuilder.build(); } // ...
    ///
    /// Example (iOS / Obj-C):
    ///
    /// // ... static UIColor* fromProto(Color* protocolor) { float red = [protocolor red]; float green = [protocolor
    /// green]; float blue = [protocolor blue]; FloatValue* alpha_wrapper = [protocolor alpha]; float alpha = 1.0; if
    /// (alpha_wrapper != nil) { alpha = [alpha_wrapper value]; } return [UIColor colorWithRed:red green:green blue:blue
    /// alpha:alpha]; }
    ///
    /// static Color* toProto(UIColor* color) { CGFloat red, green, blue, alpha; if (![color getRed: green: blue:
    /// alpha:]) { return nil; } Color* result = [Color alloc] init]; [result setRed:red]; [result setGreen:green];
    /// [result setBlue:blue]; if (alpha <= 0.9999) { [result setAlpha:floatWrapperWithValue(alpha)]; } [result
    /// autorelease]; return result; } // ...
    ///
    /// Example (JavaScript):
    ///
    /// // ...
    ///
    /// var protoToCssColor = function(rgb_color) { var redFrac = rgb_color.red || 0.0; var greenFrac = rgb_color.green
    /// || 0.0; var blueFrac = rgb_color.blue || 0.0; var red = Math.floor(redFrac * 255); var green =
    /// Math.floor(greenFrac * 255); var blue = Math.floor(blueFrac * 255);
    ///
    /// if (!('alpha' in rgb_color)) { return rgbToCssColor_(red, green, blue); }
    ///
    /// var alphaFrac = rgb_color.alpha.value || 0.0; var rgbParams = [red, green, blue].join(','); return ['rgba(',
    /// rgbParams, ',', alphaFrac, ')'].join(''); };
    ///
    /// var rgbToCssColor_ = function(red, green, blue) { var rgbNumber = new Number((red << 16) | (green << 8) | blue);
    /// var hexString = rgbNumber.toString(16); var missingZeros = 6 - hexString.length; var resultBuilder = ['#']; for
    /// (var i = 0; i < missingZeros; i++) { resultBuilder.push('0'); } resultBuilder.push(hexString); return
    /// resultBuilder.join(''); };
    ///
    /// // ...</summary>
    public class Color : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fraction of this color that should be applied to the pixel. That is, the final pixel color is
        /// defined by the equation:
        ///
        /// pixel color = alpha * (this color) + (1.0 - alpha) * (background color)
        ///
        /// This means that a value of 1.0 corresponds to a solid color, whereas a value of 0.0 corresponds to a
        /// completely transparent color. This uses a wrapper message rather than a simple float scalar so that it is
        /// possible to distinguish between a default value and the value being unset. If omitted, this color object is
        /// to be rendered as a solid color (as if the alpha value had been explicitly given with a value of
        /// 1.0).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alpha")]
        public virtual System.Nullable<float> Alpha { get; set; } 

        /// <summary>The amount of blue in the color as a value in the interval [0, 1].</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("blue")]
        public virtual System.Nullable<float> Blue { get; set; } 

        /// <summary>The amount of green in the color as a value in the interval [0, 1].</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("green")]
        public virtual System.Nullable<float> Green { get; set; } 

        /// <summary>The amount of red in the color as a value in the interval [0, 1].</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("red")]
        public virtual System.Nullable<float> Red { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The value of the condition.</summary>
    public class ConditionValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A relative date (based on the current date). Valid only if the type is DATE_BEFORE, DATE_AFTER,
        /// DATE_ON_OR_BEFORE or DATE_ON_OR_AFTER.
        ///
        /// Relative dates are not supported in data validation. They are supported only in conditional formatting and
        /// conditional filters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("relativeDate")]
        public virtual string RelativeDate { get; set; } 

        /// <summary>A value the condition is based on. The value will be parsed as if the user typed into a cell.
        /// Formulas are supported (and must begin with an `=`).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("userEnteredValue")]
        public virtual string UserEnteredValue { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A rule describing a conditional format.</summary>
    public class ConditionalFormatRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The formatting is either "on" or "off" according to the rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("booleanRule")]
        public virtual BooleanRule BooleanRule { get; set; } 

        /// <summary>The formatting will vary based on the gradients in the rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gradientRule")]
        public virtual GradientRule GradientRule { get; set; } 

        /// <summary>The ranges that will be formatted if the condition is true. All the ranges must be on the same
        /// grid.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ranges")]
        public virtual System.Collections.Generic.IList<GridRange> Ranges { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Copies data from the source to the destination.</summary>
    public class CopyPasteRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The location to paste to. If the range covers a span that's a multiple of the source's height or
        /// width, then the data will be repeated to fill in the destination range. If the range is smaller than the
        /// source range, the entire source data will still be copied (beyond the end of the destination
        /// range).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual GridRange Destination { get; set; } 

        /// <summary>How that data should be oriented when pasting.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pasteOrientation")]
        public virtual string PasteOrientation { get; set; } 

        /// <summary>What kind of data to paste.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pasteType")]
        public virtual string PasteType { get; set; } 

        /// <summary>The source range to copy.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual GridRange Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The request to copy a sheet across spreadsheets.</summary>
    public class CopySheetToAnotherSpreadsheetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the spreadsheet to copy the sheet to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destinationSpreadsheetId")]
        public virtual string DestinationSpreadsheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Moves data from the source to the destination.</summary>
    public class CutPasteRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The top-left coordinate where the data should be pasted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destination")]
        public virtual GridCoordinate Destination { get; set; } 

        /// <summary>What kind of data to paste.  All the source data will be cut, regardless of what is
        /// pasted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pasteType")]
        public virtual string PasteType { get; set; } 

        /// <summary>The source data to cut.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual GridRange Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A data validation rule.</summary>
    public class DataValidationRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The condition that data in the cell must match.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("condition")]
        public virtual BooleanCondition Condition { get; set; } 

        /// <summary>A message to show the user when adding data to the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inputMessage")]
        public virtual string InputMessage { get; set; } 

        /// <summary>True if the UI should be customized based on the kind of condition. If true, "List" conditions will
        /// show a dropdown.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("showCustomUi")]
        public virtual System.Nullable<bool> ShowCustomUi { get; set; } 

        /// <summary>True if invalid data should be rejected.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("strict")]
        public virtual System.Nullable<bool> Strict { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Removes the banded range with the given ID from the spreadsheet.</summary>
    public class DeleteBandingRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the banded range to delete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bandedRangeId")]
        public virtual System.Nullable<int> BandedRangeId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Deletes a conditional format rule at the given index. All subsequent rules' indexes are
    /// decremented.</summary>
    public class DeleteConditionalFormatRuleRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The zero-based index of the rule to be deleted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("index")]
        public virtual System.Nullable<int> Index { get; set; } 

        /// <summary>The sheet the rule is being deleted from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of deleting a conditional format rule.</summary>
    public class DeleteConditionalFormatRuleResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The rule that was deleted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rule")]
        public virtual ConditionalFormatRule Rule { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Deletes the dimensions from the sheet.</summary>
    public class DeleteDimensionRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dimensions to delete from the sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual DimensionRange Range { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Deletes the embedded object with the given ID.</summary>
    public class DeleteEmbeddedObjectRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the embedded object to delete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("objectId")]
        public virtual System.Nullable<int> ObjectId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Deletes a particular filter view.</summary>
    public class DeleteFilterViewRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the filter to delete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filterId")]
        public virtual System.Nullable<int> FilterId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Removes the named range with the given ID from the spreadsheet.</summary>
    public class DeleteNamedRangeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the named range to delete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namedRangeId")]
        public virtual string NamedRangeId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Deletes the protected range with the given ID.</summary>
    public class DeleteProtectedRangeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the protected range to delete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("protectedRangeId")]
        public virtual System.Nullable<int> ProtectedRangeId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Deletes a range of cells, shifting other cells into the deleted area.</summary>
    public class DeleteRangeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The range of cells to delete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The dimension from which deleted cells will be replaced with. If ROWS, existing cells will be
        /// shifted upward to replace the deleted cells. If COLUMNS, existing cells will be shifted left to replace the
        /// deleted cells.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shiftDimension")]
        public virtual string ShiftDimension { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Deletes the requested sheet.</summary>
    public class DeleteSheetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the sheet to delete.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Properties about a dimension.</summary>
    public class DimensionProperties : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if this dimension is being filtered. This field is read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hiddenByFilter")]
        public virtual System.Nullable<bool> HiddenByFilter { get; set; } 

        /// <summary>True if this dimension is explicitly hidden.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hiddenByUser")]
        public virtual System.Nullable<bool> HiddenByUser { get; set; } 

        /// <summary>The height (if a row) or width (if a column) of the dimension in pixels.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pixelSize")]
        public virtual System.Nullable<int> PixelSize { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A range along a single dimension on a sheet. All indexes are zero-based. Indexes are half open: the
    /// start index is inclusive and the end index is exclusive. Missing indexes indicate the range is unbounded on that
    /// side.</summary>
    public class DimensionRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dimension of the span.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dimension")]
        public virtual string Dimension { get; set; } 

        /// <summary>The end (exclusive) of the span, or not set if unbounded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endIndex")]
        public virtual System.Nullable<int> EndIndex { get; set; } 

        /// <summary>The sheet this span is on.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The start (inclusive) of the span, or not set if unbounded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startIndex")]
        public virtual System.Nullable<int> StartIndex { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Duplicates a particular filter view.</summary>
    public class DuplicateFilterViewRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the filter being duplicated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filterId")]
        public virtual System.Nullable<int> FilterId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of a filter view being duplicated.</summary>
    public class DuplicateFilterViewResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The newly created filter.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filter")]
        public virtual FilterView Filter { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Duplicates the contents of a sheet.</summary>
    public class DuplicateSheetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The zero-based index where the new sheet should be inserted. The index of all sheets after this are
        /// incremented.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertSheetIndex")]
        public virtual System.Nullable<int> InsertSheetIndex { get; set; } 

        /// <summary>If set, the ID of the new sheet. If not set, an ID is chosen. If set, the ID must not conflict with
        /// any existing sheet ID. If set, it must be non-negative.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newSheetId")]
        public virtual System.Nullable<int> NewSheetId { get; set; } 

        /// <summary>The name of the new sheet.  If empty, a new name is chosen for you.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newSheetName")]
        public virtual string NewSheetName { get; set; } 

        /// <summary>The sheet to duplicate.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceSheetId")]
        public virtual System.Nullable<int> SourceSheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of duplicating a sheet.</summary>
    public class DuplicateSheetResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The properties of the duplicate sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual SheetProperties Properties { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The editors of a protected range.</summary>
    public class Editors : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if anyone in the document's domain has edit access to the protected range.  Domain protection
        /// is only supported on documents within a domain.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domainUsersCanEdit")]
        public virtual System.Nullable<bool> DomainUsersCanEdit { get; set; } 

        /// <summary>The email addresses of groups with edit access to the protected range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("groups")]
        public virtual System.Collections.Generic.IList<string> Groups { get; set; } 

        /// <summary>The email addresses of users with edit access to the protected range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("users")]
        public virtual System.Collections.Generic.IList<string> Users { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A chart embedded in a sheet.</summary>
    public class EmbeddedChart : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("chartId")]
        public virtual System.Nullable<int> ChartId { get; set; } 

        /// <summary>The position of the chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual EmbeddedObjectPosition Position { get; set; } 

        /// <summary>The specification of the chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spec")]
        public virtual ChartSpec Spec { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The position of an embedded object such as a chart.</summary>
    public class EmbeddedObjectPosition : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If true, the embedded object will be put on a new sheet whose ID is chosen for you. Used only when
        /// writing.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newSheet")]
        public virtual System.Nullable<bool> NewSheet { get; set; } 

        /// <summary>The position at which the object is overlaid on top of a grid.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("overlayPosition")]
        public virtual OverlayPosition OverlayPosition { get; set; } 

        /// <summary>The sheet this is on. Set only if the embedded object is on its own sheet. Must be non-
        /// negative.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An error in a cell.</summary>
    public class ErrorValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A message with more information about the error (in the spreadsheet's locale).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; } 

        /// <summary>The type of error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The kinds of value that a cell in a spreadsheet can have.</summary>
    public class ExtendedValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Represents a boolean value.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("boolValue")]
        public virtual System.Nullable<bool> BoolValue { get; set; } 

        /// <summary>Represents an error. This field is read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("errorValue")]
        public virtual ErrorValue ErrorValue { get; set; } 

        /// <summary>Represents a formula.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formulaValue")]
        public virtual string FormulaValue { get; set; } 

        /// <summary>Represents a double value. Note: Dates, Times and DateTimes are represented as doubles in "serial
        /// number" format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numberValue")]
        public virtual System.Nullable<double> NumberValue { get; set; } 

        /// <summary>Represents a string value. Leading single quotes are not included. For example, if the user typed
        /// `'123` into the UI, this would be represented as a `stringValue` of `"123"`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("stringValue")]
        public virtual string StringValue { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Criteria for showing/hiding rows in a filter or filter view.</summary>
    public class FilterCriteria : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A condition that must be true for values to be shown. (This does not override hiddenValues -- if a
        /// value is listed there, it will still be hidden.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("condition")]
        public virtual BooleanCondition Condition { get; set; } 

        /// <summary>Values that should be hidden.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hiddenValues")]
        public virtual System.Collections.Generic.IList<string> HiddenValues { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A filter view.</summary>
    public class FilterView : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The criteria for showing/hiding values per column. The map's key is the column index, and the value
        /// is the criteria for that column.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("criteria")]
        public virtual System.Collections.Generic.IDictionary<string,FilterCriteria> Criteria { get; set; } 

        /// <summary>The ID of the filter view.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filterViewId")]
        public virtual System.Nullable<int> FilterViewId { get; set; } 

        /// <summary>The named range this filter view is backed by, if any.
        ///
        /// When writing, only one of range or named_range_id may be set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namedRangeId")]
        public virtual string NamedRangeId { get; set; } 

        /// <summary>The range this filter view covers.
        ///
        /// When writing, only one of range or named_range_id may be set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The sort order per column. Later specifications are used when values are equal in the earlier
        /// specifications.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sortSpecs")]
        public virtual System.Collections.Generic.IList<SortSpec> SortSpecs { get; set; } 

        /// <summary>The name of the filter view.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Finds and replaces data in cells over a range, sheet, or all sheets.</summary>
    public class FindReplaceRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True to find/replace over all sheets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("allSheets")]
        public virtual System.Nullable<bool> AllSheets { get; set; } 

        /// <summary>The value to search.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("find")]
        public virtual string Find { get; set; } 

        /// <summary>True if the search should include cells with formulas. False to skip cells with formulas.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("includeFormulas")]
        public virtual System.Nullable<bool> IncludeFormulas { get; set; } 

        /// <summary>True if the search is case sensitive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("matchCase")]
        public virtual System.Nullable<bool> MatchCase { get; set; } 

        /// <summary>True if the find value should match the entire cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("matchEntireCell")]
        public virtual System.Nullable<bool> MatchEntireCell { get; set; } 

        /// <summary>The range to find/replace over.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The value to use as the replacement.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("replacement")]
        public virtual string Replacement { get; set; } 

        /// <summary>True if the find value is a regex. The regular expression and replacement should follow Java regex
        /// rules at https://docs.oracle.com/javase/8/docs/api/java/util/regex/Pattern.html. The replacement string is
        /// allowed to refer to capturing groups. For example, if one cell has the contents `"Google Sheets"` and
        /// another has `"Google Docs"`, then searching for `"o.* (.*)"` with a replacement of `"$1 Rocks"` would change
        /// the contents of the cells to `"GSheets Rocks"` and `"GDocs Rocks"` respectively.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("searchByRegex")]
        public virtual System.Nullable<bool> SearchByRegex { get; set; } 

        /// <summary>The sheet to find/replace over.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of the find/replace.</summary>
    public class FindReplaceResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number of formula cells changed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formulasChanged")]
        public virtual System.Nullable<int> FormulasChanged { get; set; } 

        /// <summary>The number of occurrences (possibly multiple within a cell) changed. For example, if replacing
        /// `"e"` with `"o"` in `"Google Sheets"`, this would be `"3"` because `"Google Sheets"` -> `"Googlo
        /// Shoots"`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("occurrencesChanged")]
        public virtual System.Nullable<int> OccurrencesChanged { get; set; } 

        /// <summary>The number of rows changed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rowsChanged")]
        public virtual System.Nullable<int> RowsChanged { get; set; } 

        /// <summary>The number of sheets changed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetsChanged")]
        public virtual System.Nullable<int> SheetsChanged { get; set; } 

        /// <summary>The number of non-formula cells changed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valuesChanged")]
        public virtual System.Nullable<int> ValuesChanged { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A rule that applies a gradient color scale format, based on the interpolation points listed. The format
    /// of a cell will vary based on its contents as compared to the values of the interpolation points.</summary>
    public class GradientRule : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The final interpolation point.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxpoint")]
        public virtual InterpolationPoint Maxpoint { get; set; } 

        /// <summary>An optional midway interpolation point.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("midpoint")]
        public virtual InterpolationPoint Midpoint { get; set; } 

        /// <summary>The starting interpolation point.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("minpoint")]
        public virtual InterpolationPoint Minpoint { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A coordinate in a sheet. All indexes are zero-based.</summary>
    public class GridCoordinate : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The column index of the coordinate.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("columnIndex")]
        public virtual System.Nullable<int> ColumnIndex { get; set; } 

        /// <summary>The row index of the coordinate.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rowIndex")]
        public virtual System.Nullable<int> RowIndex { get; set; } 

        /// <summary>The sheet this coordinate is on.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Data in the grid, as well as metadata about the dimensions.</summary>
    public class GridData : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Metadata about the requested columns in the grid, starting with the column in
        /// start_column.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("columnMetadata")]
        public virtual System.Collections.Generic.IList<DimensionProperties> ColumnMetadata { get; set; } 

        /// <summary>The data in the grid, one entry per row, starting with the row in startRow. The values in RowData
        /// will correspond to columns starting at start_column.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rowData")]
        public virtual System.Collections.Generic.IList<RowData> RowData { get; set; } 

        /// <summary>Metadata about the requested rows in the grid, starting with the row in start_row.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rowMetadata")]
        public virtual System.Collections.Generic.IList<DimensionProperties> RowMetadata { get; set; } 

        /// <summary>The first column this GridData refers to, zero-based.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startColumn")]
        public virtual System.Nullable<int> StartColumn { get; set; } 

        /// <summary>The first row this GridData refers to, zero-based.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startRow")]
        public virtual System.Nullable<int> StartRow { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Properties of a grid.</summary>
    public class GridProperties : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The number of columns in the grid.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("columnCount")]
        public virtual System.Nullable<int> ColumnCount { get; set; } 

        /// <summary>The number of columns that are frozen in the grid.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("frozenColumnCount")]
        public virtual System.Nullable<int> FrozenColumnCount { get; set; } 

        /// <summary>The number of rows that are frozen in the grid.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("frozenRowCount")]
        public virtual System.Nullable<int> FrozenRowCount { get; set; } 

        /// <summary>True if the grid isn't showing gridlines in the UI.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hideGridlines")]
        public virtual System.Nullable<bool> HideGridlines { get; set; } 

        /// <summary>The number of rows in the grid.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rowCount")]
        public virtual System.Nullable<int> RowCount { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A range on a sheet. All indexes are zero-based. Indexes are half open, e.g the start index is inclusive
    /// and the end index is exclusive -- [start_index, end_index). Missing indexes indicate the range is unbounded on
    /// that side.
    ///
    /// For example, if `"Sheet1"` is sheet ID 0, then:
    ///
    /// `Sheet1!A1:A1 == sheet_id: 0, start_row_index: 0, end_row_index: 1, start_column_index: 0, end_column_index: 1`
    ///
    /// `Sheet1!A3:B4 == sheet_id: 0, start_row_index: 2, end_row_index: 4, start_column_index: 0, end_column_index: 2`
    ///
    /// `Sheet1!A:B == sheet_id: 0, start_column_index: 0, end_column_index: 2`
    ///
    /// `Sheet1!A5:B == sheet_id: 0, start_row_index: 4, start_column_index: 0, end_column_index: 2`
    ///
    /// `Sheet1 == sheet_id:0`
    ///
    /// The start index must always be less than or equal to the end index. If the start index equals the end index,
    /// then the range is empty. Empty ranges are typically not meaningful and are usually rendered in the UI as
    /// `#REF!`.</summary>
    public class GridRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The end column (exclusive) of the range, or not set if unbounded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endColumnIndex")]
        public virtual System.Nullable<int> EndColumnIndex { get; set; } 

        /// <summary>The end row (exclusive) of the range, or not set if unbounded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endRowIndex")]
        public virtual System.Nullable<int> EndRowIndex { get; set; } 

        /// <summary>The sheet this range is on.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The start column (inclusive) of the range, or not set if unbounded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startColumnIndex")]
        public virtual System.Nullable<int> StartColumnIndex { get; set; } 

        /// <summary>The start row (inclusive) of the range, or not set if unbounded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startRowIndex")]
        public virtual System.Nullable<int> StartRowIndex { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Inserts rows or columns in a sheet at a particular index.</summary>
    public class InsertDimensionRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Whether dimension properties should be extended from the dimensions before or after the newly
        /// inserted dimensions. True to inherit from the dimensions before (in which case the start index must be
        /// greater than 0), and false to inherit from the dimensions after.
        ///
        /// For example, if row index 0 has red background and row index 1 has a green background, then inserting 2 rows
        /// at index 1 can inherit either the green or red background.  If `inheritFromBefore` is true, the two new rows
        /// will be red (because the row before the insertion point was red), whereas if `inheritFromBefore` is false,
        /// the two new rows will be green (because the row after the insertion point was green).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("inheritFromBefore")]
        public virtual System.Nullable<bool> InheritFromBefore { get; set; } 

        /// <summary>The dimensions to insert.  Both the start and end indexes must be bounded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual DimensionRange Range { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Inserts cells into a range, shifting the existing cells over or down.</summary>
    public class InsertRangeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The range to insert new cells into.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The dimension which will be shifted when inserting cells. If ROWS, existing cells will be shifted
        /// down. If COLUMNS, existing cells will be shifted right.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("shiftDimension")]
        public virtual string ShiftDimension { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single interpolation point on a gradient conditional format. These pin the gradient color scale
    /// according to the color, type and value chosen.</summary>
    public class InterpolationPoint : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The color this interpolation point should use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("color")]
        public virtual Color Color { get; set; } 

        /// <summary>How the value should be interpreted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The value this interpolation point uses.  May be a formula. Unused if type is MIN or MAX.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Settings to control how circular dependencies are resolved with iterative calculation.</summary>
    public class IterativeCalculationSettings : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>When iterative calculation is enabled and successive results differ by less than this threshold
        /// value, the calculation rounds stop.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("convergenceThreshold")]
        public virtual System.Nullable<double> ConvergenceThreshold { get; set; } 

        /// <summary>When iterative calculation is enabled, the maximum number of calculation rounds to
        /// perform.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxIterations")]
        public virtual System.Nullable<int> MaxIterations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Merges all cells in the range.</summary>
    public class MergeCellsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>How the cells should be merged.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mergeType")]
        public virtual string MergeType { get; set; } 

        /// <summary>The range of cells to merge.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Moves one or more rows or columns.</summary>
    public class MoveDimensionRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The zero-based start index of where to move the source data to, based on the coordinates *before*
        /// the source data is removed from the grid.  Existing data will be shifted down or right (depending on the
        /// dimension) to make room for the moved dimensions. The source dimensions are removed from the grid, so the
        /// the data may end up in a different index than specified.
        ///
        /// For example, given `A1..A5` of `0, 1, 2, 3, 4` and wanting to move `"1"` and `"2"` to between `"3"` and
        /// `"4"`, the source would be `ROWS [1..3)`,and the destination index would be `"4"` (the zero-based index of
        /// row 5). The end result would be `A1..A5` of `0, 3, 1, 2, 4`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("destinationIndex")]
        public virtual System.Nullable<int> DestinationIndex { get; set; } 

        /// <summary>The source dimensions to move.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual DimensionRange Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A named range.</summary>
    public class NamedRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the named range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ID of the named range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namedRangeId")]
        public virtual string NamedRangeId { get; set; } 

        /// <summary>The range this represents.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The number format of a cell.</summary>
    public class NumberFormat : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Pattern string used for formatting.  If not set, a default pattern based on the user's locale will
        /// be used if necessary for the given type. See the [Date and Number Formats guide](/sheets/api/guides/formats)
        /// for more information about the supported patterns.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pattern")]
        public virtual string Pattern { get; set; } 

        /// <summary>The type of the number format. When writing, this field must be set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The location an object is overlaid on top of a grid.</summary>
    public class OverlayPosition : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The cell the object is anchored to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("anchorCell")]
        public virtual GridCoordinate AnchorCell { get; set; } 

        /// <summary>The height of the object, in pixels. Defaults to 371.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("heightPixels")]
        public virtual System.Nullable<int> HeightPixels { get; set; } 

        /// <summary>The horizontal offset, in pixels, that the object is offset from the anchor cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("offsetXPixels")]
        public virtual System.Nullable<int> OffsetXPixels { get; set; } 

        /// <summary>The vertical offset, in pixels, that the object is offset from the anchor cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("offsetYPixels")]
        public virtual System.Nullable<int> OffsetYPixels { get; set; } 

        /// <summary>The width of the object, in pixels. Defaults to 600.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("widthPixels")]
        public virtual System.Nullable<int> WidthPixels { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The amount of padding around the cell, in pixels. When updating padding, every field must be
    /// specified.</summary>
    public class Padding : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The bottom padding of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bottom")]
        public virtual System.Nullable<int> Bottom { get; set; } 

        /// <summary>The left padding of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("left")]
        public virtual System.Nullable<int> Left { get; set; } 

        /// <summary>The right padding of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("right")]
        public virtual System.Nullable<int> Right { get; set; } 

        /// <summary>The top padding of the cell.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("top")]
        public virtual System.Nullable<int> Top { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Inserts data into the spreadsheet starting at the specified coordinate.</summary>
    public class PasteDataRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The coordinate at which the data should start being inserted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("coordinate")]
        public virtual GridCoordinate Coordinate { get; set; } 

        /// <summary>The data to insert.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("data")]
        public virtual string Data { get; set; } 

        /// <summary>The delimiter in the data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("delimiter")]
        public virtual string Delimiter { get; set; } 

        /// <summary>True if the data is HTML.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("html")]
        public virtual System.Nullable<bool> Html { get; set; } 

        /// <summary>How the data should be pasted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A pie chart.</summary>
    public class PieChartSpec : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The data that covers the domain of the pie chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("domain")]
        public virtual ChartData Domain { get; set; } 

        /// <summary>Where the legend of the pie chart should be drawn.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("legendPosition")]
        public virtual string LegendPosition { get; set; } 

        /// <summary>The size of the hole in the pie chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pieHole")]
        public virtual System.Nullable<double> PieHole { get; set; } 

        /// <summary>The data that covers the one and only series of the pie chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("series")]
        public virtual ChartData Series { get; set; } 

        /// <summary>True if the pie is three dimensional.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("threeDimensional")]
        public virtual System.Nullable<bool> ThreeDimensional { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Criteria for showing/hiding rows in a pivot table.</summary>
    public class PivotFilterCriteria : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Values that should be included.  Values not listed here are excluded.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("visibleValues")]
        public virtual System.Collections.Generic.IList<string> VisibleValues { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single grouping (either row or column) in a pivot table.</summary>
    public class PivotGroup : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the pivot table should include the totals for this grouping.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("showTotals")]
        public virtual System.Nullable<bool> ShowTotals { get; set; } 

        /// <summary>The order the values in this group should be sorted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sortOrder")]
        public virtual string SortOrder { get; set; } 

        /// <summary>The column offset of the source range that this grouping is based on.
        ///
        /// For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0` means this group refers to column
        /// `C`, whereas the offset `1` would refer to column `D`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceColumnOffset")]
        public virtual System.Nullable<int> SourceColumnOffset { get; set; } 

        /// <summary>The bucket of the opposite pivot group to sort by. If not specified, sorting is alphabetical by
        /// this group's values.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valueBucket")]
        public virtual PivotGroupSortValueBucket ValueBucket { get; set; } 

        /// <summary>Metadata about values in the grouping.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valueMetadata")]
        public virtual System.Collections.Generic.IList<PivotGroupValueMetadata> ValueMetadata { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Information about which values in a pivot group should be used for sorting.</summary>
    public class PivotGroupSortValueBucket : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Determines the bucket from which values are chosen to sort.
        ///
        /// For example, in a pivot table with one row group & two column groups, the row group can list up to two
        /// values. The first value corresponds to a value within the first column group, and the second value
        /// corresponds to a value in the second column group.  If no values are listed, this would indicate that the
        /// row should be sorted according to the "Grand Total" over the column groups. If a single value is listed,
        /// this would correspond to using the "Total" of that bucket.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("buckets")]
        public virtual System.Collections.Generic.IList<ExtendedValue> Buckets { get; set; } 

        /// <summary>The offset in the PivotTable.values list which the values in this grouping should be sorted
        /// by.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valuesIndex")]
        public virtual System.Nullable<int> ValuesIndex { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Metadata about a value in a pivot grouping.</summary>
    public class PivotGroupValueMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the data corresponding to the value is collapsed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("collapsed")]
        public virtual System.Nullable<bool> Collapsed { get; set; } 

        /// <summary>The calculated value the metadata corresponds to. (Note that formulaValue is not valid, because the
        /// values will be calculated.)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual ExtendedValue Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A pivot table.</summary>
    public class PivotTable : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Each column grouping in the pivot table.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("columns")]
        public virtual System.Collections.Generic.IList<PivotGroup> Columns { get; set; } 

        /// <summary>An optional mapping of filters per source column offset.
        ///
        /// The filters will be applied before aggregating data into the pivot table. The map's key is the column offset
        /// of the source range that you want to filter, and the value is the criteria for that column.
        ///
        /// For example, if the source was `C10:E15`, a key of `0` will have the filter for column `C`, whereas the key
        /// `1` is for column `D`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("criteria")]
        public virtual System.Collections.Generic.IDictionary<string,PivotFilterCriteria> Criteria { get; set; } 

        /// <summary>Each row grouping in the pivot table.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rows")]
        public virtual System.Collections.Generic.IList<PivotGroup> Rows { get; set; } 

        /// <summary>The range the pivot table is reading data from.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual GridRange Source { get; set; } 

        /// <summary>Whether values should be listed horizontally (as columns) or vertically (as rows).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("valueLayout")]
        public virtual string ValueLayout { get; set; } 

        /// <summary>A list of values to include in the pivot table.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("values")]
        public virtual System.Collections.Generic.IList<PivotValue> Values { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The definition of how a value in a pivot table should be calculated.</summary>
    public class PivotValue : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A custom formula to calculate the value.  The formula must start with an `=` character.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("formula")]
        public virtual string Formula { get; set; } 

        /// <summary>A name to use for the value. This is only used if formula was set. Otherwise, the column name is
        /// used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The column offset of the source range that this value reads from.
        ///
        /// For example, if the source was `C10:E15`, a `sourceColumnOffset` of `0` means this value refers to column
        /// `C`, whereas the offset `1` would refer to column `D`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceColumnOffset")]
        public virtual System.Nullable<int> SourceColumnOffset { get; set; } 

        /// <summary>A function to summarize the value. If formula is set, the only supported values are SUM and CUSTOM.
        /// If sourceColumnOffset is set, then `CUSTOM` is not supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("summarizeFunction")]
        public virtual string SummarizeFunction { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A protected range.</summary>
    public class ProtectedRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The description of this protected range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The users and groups with edit access to the protected range. This field is only visible to users
        /// with edit access to the protected range and the document. Editors are not supported with warning_only
        /// protection.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("editors")]
        public virtual Editors Editors { get; set; } 

        /// <summary>The named range this protected range is backed by, if any.
        ///
        /// When writing, only one of range or named_range_id may be set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namedRangeId")]
        public virtual string NamedRangeId { get; set; } 

        /// <summary>The ID of the protected range. This field is read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("protectedRangeId")]
        public virtual System.Nullable<int> ProtectedRangeId { get; set; } 

        /// <summary>The range that is being protected. The range may be fully unbounded, in which case this is
        /// considered a protected sheet.
        ///
        /// When writing, only one of range or named_range_id may be set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>True if the user who requested this protected range can edit the protected area. This field is
        /// read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestingUserCanEdit")]
        public virtual System.Nullable<bool> RequestingUserCanEdit { get; set; } 

        /// <summary>The list of unprotected ranges within a protected sheet. Unprotected ranges are only supported on
        /// protected sheets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unprotectedRanges")]
        public virtual System.Collections.Generic.IList<GridRange> UnprotectedRanges { get; set; } 

        /// <summary>True if this protected range will show a warning when editing. Warning-based protection means that
        /// every user can edit data in the protected range, except editing will prompt a warning asking the user to
        /// confirm the edit.
        ///
        /// When writing: if this field is true, then editors is ignored. Additionally, if this field is changed from
        /// true to false and the `editors` field is not set (nor included in the field mask), then the editors will be
        /// set to all the editors in the document.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("warningOnly")]
        public virtual System.Nullable<bool> WarningOnly { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates all cells in the range to the values in the given Cell object. Only the fields listed in the
    /// fields field are updated; others are unchanged.
    ///
    /// If writing a cell with a formula, the formula's ranges will automatically increment for each field in the range.
    /// For example, if writing a cell with formula `=A1` into range B2:C4, B2 would be `=A1`, B3 would be `=A2`, B4
    /// would be `=A3`, C2 would be `=B1`, C3 would be `=B2`, C4 would be `=B3`.
    ///
    /// To keep the formula's ranges static, use the `$` indicator. For example, use the formula `=$A$1` to prevent both
    /// the row and the column from incrementing.</summary>
    public class RepeatCellRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The data to write.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cell")]
        public virtual CellData Cell { get; set; } 

        /// <summary>The fields that should be updated.  At least one field must be specified. The root `cell` is
        /// implied and should not be specified. A single `"*"` can be used as short-hand for listing every
        /// field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>The range to repeat the cell in.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single kind of update to apply to a spreadsheet.</summary>
    public class Request : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Adds a new banded range</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addBanding")]
        public virtual AddBandingRequest AddBanding { get; set; } 

        /// <summary>Adds a chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addChart")]
        public virtual AddChartRequest AddChart { get; set; } 

        /// <summary>Adds a new conditional format rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addConditionalFormatRule")]
        public virtual AddConditionalFormatRuleRequest AddConditionalFormatRule { get; set; } 

        /// <summary>Adds a filter view.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addFilterView")]
        public virtual AddFilterViewRequest AddFilterView { get; set; } 

        /// <summary>Adds a named range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addNamedRange")]
        public virtual AddNamedRangeRequest AddNamedRange { get; set; } 

        /// <summary>Adds a protected range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addProtectedRange")]
        public virtual AddProtectedRangeRequest AddProtectedRange { get; set; } 

        /// <summary>Adds a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addSheet")]
        public virtual AddSheetRequest AddSheet { get; set; } 

        /// <summary>Appends cells after the last row with data in a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("appendCells")]
        public virtual AppendCellsRequest AppendCells { get; set; } 

        /// <summary>Appends dimensions to the end of a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("appendDimension")]
        public virtual AppendDimensionRequest AppendDimension { get; set; } 

        /// <summary>Automatically fills in more data based on existing data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("autoFill")]
        public virtual AutoFillRequest AutoFill { get; set; } 

        /// <summary>Automatically resizes one or more dimensions based on the contents of the cells in that
        /// dimension.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("autoResizeDimensions")]
        public virtual AutoResizeDimensionsRequest AutoResizeDimensions { get; set; } 

        /// <summary>Clears the basic filter on a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clearBasicFilter")]
        public virtual ClearBasicFilterRequest ClearBasicFilter { get; set; } 

        /// <summary>Copies data from one area and pastes it to another.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("copyPaste")]
        public virtual CopyPasteRequest CopyPaste { get; set; } 

        /// <summary>Cuts data from one area and pastes it to another.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cutPaste")]
        public virtual CutPasteRequest CutPaste { get; set; } 

        /// <summary>Removes a banded range</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteBanding")]
        public virtual DeleteBandingRequest DeleteBanding { get; set; } 

        /// <summary>Deletes an existing conditional format rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteConditionalFormatRule")]
        public virtual DeleteConditionalFormatRuleRequest DeleteConditionalFormatRule { get; set; } 

        /// <summary>Deletes rows or columns in a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteDimension")]
        public virtual DeleteDimensionRequest DeleteDimension { get; set; } 

        /// <summary>Deletes an embedded object (e.g, chart, image) in a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteEmbeddedObject")]
        public virtual DeleteEmbeddedObjectRequest DeleteEmbeddedObject { get; set; } 

        /// <summary>Deletes a filter view from a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteFilterView")]
        public virtual DeleteFilterViewRequest DeleteFilterView { get; set; } 

        /// <summary>Deletes a named range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteNamedRange")]
        public virtual DeleteNamedRangeRequest DeleteNamedRange { get; set; } 

        /// <summary>Deletes a protected range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteProtectedRange")]
        public virtual DeleteProtectedRangeRequest DeleteProtectedRange { get; set; } 

        /// <summary>Deletes a range of cells from a sheet, shifting the remaining cells.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteRange")]
        public virtual DeleteRangeRequest DeleteRange { get; set; } 

        /// <summary>Deletes a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteSheet")]
        public virtual DeleteSheetRequest DeleteSheet { get; set; } 

        /// <summary>Duplicates a filter view.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("duplicateFilterView")]
        public virtual DuplicateFilterViewRequest DuplicateFilterView { get; set; } 

        /// <summary>Duplicates a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("duplicateSheet")]
        public virtual DuplicateSheetRequest DuplicateSheet { get; set; } 

        /// <summary>Finds and replaces occurrences of some text with other text.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("findReplace")]
        public virtual FindReplaceRequest FindReplace { get; set; } 

        /// <summary>Inserts new rows or columns in a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertDimension")]
        public virtual InsertDimensionRequest InsertDimension { get; set; } 

        /// <summary>Inserts new cells in a sheet, shifting the existing cells.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("insertRange")]
        public virtual InsertRangeRequest InsertRange { get; set; } 

        /// <summary>Merges cells together.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mergeCells")]
        public virtual MergeCellsRequest MergeCells { get; set; } 

        /// <summary>Moves rows or columns to another location in a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("moveDimension")]
        public virtual MoveDimensionRequest MoveDimension { get; set; } 

        /// <summary>Pastes data (HTML or delimited) into a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pasteData")]
        public virtual PasteDataRequest PasteData { get; set; } 

        /// <summary>Repeats a single cell across a range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("repeatCell")]
        public virtual RepeatCellRequest RepeatCell { get; set; } 

        /// <summary>Sets the basic filter on a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("setBasicFilter")]
        public virtual SetBasicFilterRequest SetBasicFilter { get; set; } 

        /// <summary>Sets data validation for one or more cells.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("setDataValidation")]
        public virtual SetDataValidationRequest SetDataValidation { get; set; } 

        /// <summary>Sorts data in a range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sortRange")]
        public virtual SortRangeRequest SortRange { get; set; } 

        /// <summary>Converts a column of text into many columns of text.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("textToColumns")]
        public virtual TextToColumnsRequest TextToColumns { get; set; } 

        /// <summary>Unmerges merged cells.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("unmergeCells")]
        public virtual UnmergeCellsRequest UnmergeCells { get; set; } 

        /// <summary>Updates a banded range</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateBanding")]
        public virtual UpdateBandingRequest UpdateBanding { get; set; } 

        /// <summary>Updates the borders in a range of cells.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateBorders")]
        public virtual UpdateBordersRequest UpdateBorders { get; set; } 

        /// <summary>Updates many cells at once.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateCells")]
        public virtual UpdateCellsRequest UpdateCells { get; set; } 

        /// <summary>Updates a chart's specifications.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateChartSpec")]
        public virtual UpdateChartSpecRequest UpdateChartSpec { get; set; } 

        /// <summary>Updates an existing conditional format rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateConditionalFormatRule")]
        public virtual UpdateConditionalFormatRuleRequest UpdateConditionalFormatRule { get; set; } 

        /// <summary>Updates dimensions' properties.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateDimensionProperties")]
        public virtual UpdateDimensionPropertiesRequest UpdateDimensionProperties { get; set; } 

        /// <summary>Updates an embedded object's (e.g. chart, image) position.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateEmbeddedObjectPosition")]
        public virtual UpdateEmbeddedObjectPositionRequest UpdateEmbeddedObjectPosition { get; set; } 

        /// <summary>Updates the properties of a filter view.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateFilterView")]
        public virtual UpdateFilterViewRequest UpdateFilterView { get; set; } 

        /// <summary>Updates a named range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateNamedRange")]
        public virtual UpdateNamedRangeRequest UpdateNamedRange { get; set; } 

        /// <summary>Updates a protected range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateProtectedRange")]
        public virtual UpdateProtectedRangeRequest UpdateProtectedRange { get; set; } 

        /// <summary>Updates a sheet's properties.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateSheetProperties")]
        public virtual UpdateSheetPropertiesRequest UpdateSheetProperties { get; set; } 

        /// <summary>Updates the spreadsheet's properties.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateSpreadsheetProperties")]
        public virtual UpdateSpreadsheetPropertiesRequest UpdateSpreadsheetProperties { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single response from an update.</summary>
    public class Response : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A reply from adding a banded range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addBanding")]
        public virtual AddBandingResponse AddBanding { get; set; } 

        /// <summary>A reply from adding a chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addChart")]
        public virtual AddChartResponse AddChart { get; set; } 

        /// <summary>A reply from adding a filter view.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addFilterView")]
        public virtual AddFilterViewResponse AddFilterView { get; set; } 

        /// <summary>A reply from adding a named range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addNamedRange")]
        public virtual AddNamedRangeResponse AddNamedRange { get; set; } 

        /// <summary>A reply from adding a protected range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addProtectedRange")]
        public virtual AddProtectedRangeResponse AddProtectedRange { get; set; } 

        /// <summary>A reply from adding a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("addSheet")]
        public virtual AddSheetResponse AddSheet { get; set; } 

        /// <summary>A reply from deleting a conditional format rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deleteConditionalFormatRule")]
        public virtual DeleteConditionalFormatRuleResponse DeleteConditionalFormatRule { get; set; } 

        /// <summary>A reply from duplicating a filter view.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("duplicateFilterView")]
        public virtual DuplicateFilterViewResponse DuplicateFilterView { get; set; } 

        /// <summary>A reply from duplicating a sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("duplicateSheet")]
        public virtual DuplicateSheetResponse DuplicateSheet { get; set; } 

        /// <summary>A reply from doing a find/replace.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("findReplace")]
        public virtual FindReplaceResponse FindReplace { get; set; } 

        /// <summary>A reply from updating a conditional format rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateConditionalFormatRule")]
        public virtual UpdateConditionalFormatRuleResponse UpdateConditionalFormatRule { get; set; } 

        /// <summary>A reply from updating an embedded object's position.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updateEmbeddedObjectPosition")]
        public virtual UpdateEmbeddedObjectPositionResponse UpdateEmbeddedObjectPosition { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Data about each cell in a row.</summary>
    public class RowData : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The values in the row, one per column.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("values")]
        public virtual System.Collections.Generic.IList<CellData> Values { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Sets the basic filter associated with a sheet.</summary>
    public class SetBasicFilterRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The filter to set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filter")]
        public virtual BasicFilter Filter { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Sets a data validation rule to every cell in the range. To clear validation in a range, call this with
    /// no rule specified.</summary>
    public class SetDataValidationRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The range the data validation rule should apply to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The data validation rule to set on each cell in the range, or empty to clear the data validation in
        /// the range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rule")]
        public virtual DataValidationRule Rule { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A sheet in a spreadsheet.</summary>
    public class Sheet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The banded (i.e. alternating colors) ranges on this sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bandedRanges")]
        public virtual System.Collections.Generic.IList<BandedRange> BandedRanges { get; set; } 

        /// <summary>The filter on this sheet, if any.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("basicFilter")]
        public virtual BasicFilter BasicFilter { get; set; } 

        /// <summary>The specifications of every chart on this sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("charts")]
        public virtual System.Collections.Generic.IList<EmbeddedChart> Charts { get; set; } 

        /// <summary>The conditional format rules in this sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conditionalFormats")]
        public virtual System.Collections.Generic.IList<ConditionalFormatRule> ConditionalFormats { get; set; } 

        /// <summary>Data in the grid, if this is a grid sheet. The number of GridData objects returned is dependent on
        /// the number of ranges requested on this sheet. For example, if this is representing `Sheet1`, and the
        /// spreadsheet was requested with ranges `Sheet1!A1:C10` and `Sheet1!D15:E20`, then the first GridData will
        /// have a startRow/startColumn of `0`, while the second one will have `startRow 14` (zero-based row 15), and
        /// `startColumn 3` (zero-based column D).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("data")]
        public virtual System.Collections.Generic.IList<GridData> Data { get; set; } 

        /// <summary>The filter views in this sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filterViews")]
        public virtual System.Collections.Generic.IList<FilterView> FilterViews { get; set; } 

        /// <summary>The ranges that are merged together.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("merges")]
        public virtual System.Collections.Generic.IList<GridRange> Merges { get; set; } 

        /// <summary>The properties of the sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual SheetProperties Properties { get; set; } 

        /// <summary>The protected ranges in this sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("protectedRanges")]
        public virtual System.Collections.Generic.IList<ProtectedRange> ProtectedRanges { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Properties of a sheet.</summary>
    public class SheetProperties : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Additional properties of the sheet if this sheet is a grid. (If the sheet is an object sheet,
        /// containing a chart or image, then this field will be absent.) When writing it is an error to set any grid
        /// properties on non-grid sheets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("gridProperties")]
        public virtual GridProperties GridProperties { get; set; } 

        /// <summary>True if the sheet is hidden in the UI, false if it's visible.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("hidden")]
        public virtual System.Nullable<bool> Hidden { get; set; } 

        /// <summary>The index of the sheet within the spreadsheet. When adding or updating sheet properties, if this
        /// field is excluded then the sheet will be added or moved to the end of the sheet list. When updating sheet
        /// indices or inserting sheets, movement is considered in "before the move" indexes. For example, if there were
        /// 3 sheets (S1, S2, S3) in order to move S1 ahead of S2 the index would have to be set to 2. A sheet index
        /// update request will be ignored if the requested index is identical to the sheets current index or if the
        /// requested new index is equal to the current sheet index + 1.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("index")]
        public virtual System.Nullable<int> Index { get; set; } 

        /// <summary>True if the sheet is an RTL sheet instead of an LTR sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rightToLeft")]
        public virtual System.Nullable<bool> RightToLeft { get; set; } 

        /// <summary>The ID of the sheet. Must be non-negative. This field cannot be changed once set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The type of sheet. Defaults to GRID. This field cannot be changed once set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetType")]
        public virtual string SheetType { get; set; } 

        /// <summary>The color of the tab in the UI.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("tabColor")]
        public virtual Color TabColor { get; set; } 

        /// <summary>The name of the sheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Sorts data in rows based on a sort order per column.</summary>
    public class SortRangeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The range to sort.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The sort order per column. Later specifications are used when values are equal in the earlier
        /// specifications.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sortSpecs")]
        public virtual System.Collections.Generic.IList<SortSpec> SortSpecs { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A sort order associated with a specific column or row.</summary>
    public class SortSpec : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dimension the sort should be applied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dimensionIndex")]
        public virtual System.Nullable<int> DimensionIndex { get; set; } 

        /// <summary>The order data should be sorted.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sortOrder")]
        public virtual string SortOrder { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A combination of a source range and how to extend that source.</summary>
    public class SourceAndDestination : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dimension that data should be filled into.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dimension")]
        public virtual string Dimension { get; set; } 

        /// <summary>The number of rows or columns that data should be filled into. Positive numbers expand beyond the
        /// last row or last column of the source.  Negative numbers expand before the first row or first column of the
        /// source.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fillLength")]
        public virtual System.Nullable<int> FillLength { get; set; } 

        /// <summary>The location of the data to use as the source of the autofill.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual GridRange Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Resource that represents a spreadsheet.</summary>
    public class Spreadsheet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The named ranges defined in a spreadsheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namedRanges")]
        public virtual System.Collections.Generic.IList<NamedRange> NamedRanges { get; set; } 

        /// <summary>Overall properties of a spreadsheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual SpreadsheetProperties Properties { get; set; } 

        /// <summary>The sheets that are part of a spreadsheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheets")]
        public virtual System.Collections.Generic.IList<Sheet> Sheets { get; set; } 

        /// <summary>The ID of the spreadsheet. This field is read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spreadsheetId")]
        public virtual string SpreadsheetId { get; set; } 

        /// <summary>The url of the spreadsheet. This field is read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spreadsheetUrl")]
        public virtual string SpreadsheetUrl { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Properties of a spreadsheet.</summary>
    public class SpreadsheetProperties : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The amount of time to wait before volatile functions are recalculated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("autoRecalc")]
        public virtual string AutoRecalc { get; set; } 

        /// <summary>The default format of all cells in the spreadsheet. CellData.effectiveFormat will not be set if the
        /// cell's format is equal to this default format. This field is read-only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("defaultFormat")]
        public virtual CellFormat DefaultFormat { get; set; } 

        /// <summary>Determines whether and how circular references are resolved with iterative calculation.  Absence of
        /// this field means that circular references will result in calculation errors.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("iterativeCalculationSettings")]
        public virtual IterativeCalculationSettings IterativeCalculationSettings { get; set; } 

        /// <summary>The locale of the spreadsheet in one of the following formats:
        ///
        /// * an ISO 639-1 language code such as `en`
        ///
        /// * an ISO 639-2 language code such as `fil`, if no 639-1 code exists
        ///
        /// * a combination of the ISO language code and country code, such as `en_US`
        ///
        /// Note: when updating this field, not all locales/languages are supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("locale")]
        public virtual string Locale { get; set; } 

        /// <summary>The time zone of the spreadsheet, in CLDR format such as `America/New_York`. If the time zone isn't
        /// recognized, this may be a custom time zone such as `GMT-07:00`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("timeZone")]
        public virtual string TimeZone { get; set; } 

        /// <summary>The title of the spreadsheet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("title")]
        public virtual string Title { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The format of a run of text in a cell. Absent values indicate that the field isn't specified.</summary>
    public class TextFormat : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>True if the text is bold.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bold")]
        public virtual System.Nullable<bool> Bold { get; set; } 

        /// <summary>The font family.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fontFamily")]
        public virtual string FontFamily { get; set; } 

        /// <summary>The size of the font.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fontSize")]
        public virtual System.Nullable<int> FontSize { get; set; } 

        /// <summary>The foreground color of the text.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("foregroundColor")]
        public virtual Color ForegroundColor { get; set; } 

        /// <summary>True if the text is italicized.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("italic")]
        public virtual System.Nullable<bool> Italic { get; set; } 

        /// <summary>True if the text has a strikethrough.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("strikethrough")]
        public virtual System.Nullable<bool> Strikethrough { get; set; } 

        /// <summary>True if the text is underlined.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("underline")]
        public virtual System.Nullable<bool> Underline { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A run of a text format. The format of this run continues until the start index of the next run. When
    /// updating, all fields must be set.</summary>
    public class TextFormatRun : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The format of this run.  Absent values inherit the cell's format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("format")]
        public virtual TextFormat Format { get; set; } 

        /// <summary>The character index where this run starts.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startIndex")]
        public virtual System.Nullable<int> StartIndex { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The rotation applied to text in a cell.</summary>
    public class TextRotation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The angle between the standard orientation and the desired orientation. Measured in degrees. Valid
        /// values are between -90 and 90. Positive angles are angled upwards, negative are angled downwards.
        ///
        /// Note: For LTR text direction positive angles are in the counterclockwise direction, whereas for RTL they are
        /// in the clockwise direction</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("angle")]
        public virtual System.Nullable<int> Angle { get; set; } 

        /// <summary>If true, text reads top to bottom, but the orientation of individual characters is unchanged. For
        /// example:
        ///
        /// | V | | e | | r | | t | | i | | c | | a | | l |</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("vertical")]
        public virtual System.Nullable<bool> Vertical { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Splits a column of text into multiple columns, based on a delimiter in each cell.</summary>
    public class TextToColumnsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The delimiter to use. Used only if delimiterType is CUSTOM.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("delimiter")]
        public virtual string Delimiter { get; set; } 

        /// <summary>The delimiter type to use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("delimiterType")]
        public virtual string DelimiterType { get; set; } 

        /// <summary>The source data range.  This must span exactly one column.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("source")]
        public virtual GridRange Source { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Unmerges cells in the given range.</summary>
    public class UnmergeCellsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The range within which all cells should be unmerged. If the range spans multiple merges, all will
        /// be unmerged. The range must not partially span any merge.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates properties of the supplied banded range.</summary>
    public class UpdateBandingRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The banded range to update with the new properties.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bandedRange")]
        public virtual BandedRange BandedRange { get; set; } 

        /// <summary>The fields that should be updated.  At least one field must be specified. The root `bandedRange` is
        /// implied and should not be specified. A single `"*"` can be used as short-hand for listing every
        /// field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates the borders of a range. If a field is not set in the request, that means the border remains as-
    /// is. For example, with two subsequent UpdateBordersRequest:
    ///
    /// 1. range: A1:A5 `{ top: RED, bottom: WHITE }` 2. range: A1:A5 `{ left: BLUE }`
    ///
    /// That would result in A1:A5 having a borders of `{ top: RED, bottom: WHITE, left: BLUE }`. If you want to clear a
    /// border, explicitly set the style to NONE.</summary>
    public class UpdateBordersRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The border to put at the bottom of the range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bottom")]
        public virtual Border Bottom { get; set; } 

        /// <summary>The horizontal border to put within the range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("innerHorizontal")]
        public virtual Border InnerHorizontal { get; set; } 

        /// <summary>The vertical border to put within the range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("innerVertical")]
        public virtual Border InnerVertical { get; set; } 

        /// <summary>The border to put at the left of the range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("left")]
        public virtual Border Left { get; set; } 

        /// <summary>The range whose borders should be updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The border to put at the right of the range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("right")]
        public virtual Border Right { get; set; } 

        /// <summary>The border to put at the top of the range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("top")]
        public virtual Border Top { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates all cells in a range with new data.</summary>
    public class UpdateCellsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fields of CellData that should be updated. At least one field must be specified. The root is
        /// the CellData; 'row.values.' should not be specified. A single `"*"` can be used as short-hand for listing
        /// every field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>The range to write data to.
        ///
        /// If the data in rows does not cover the entire requested range, the fields matching those set in fields will
        /// be cleared.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual GridRange Range { get; set; } 

        /// <summary>The data to write.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rows")]
        public virtual System.Collections.Generic.IList<RowData> Rows { get; set; } 

        /// <summary>The coordinate to start writing data at. Any number of rows and columns (including a different
        /// number of columns per row) may be written.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual GridCoordinate Start { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates a chart's specifications. (This does not move or resize a chart. To move or resize a chart, use
    /// UpdateEmbeddedObjectPositionRequest.)</summary>
    public class UpdateChartSpecRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the chart to update.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("chartId")]
        public virtual System.Nullable<int> ChartId { get; set; } 

        /// <summary>The specification to apply to the chart.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spec")]
        public virtual ChartSpec Spec { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates a conditional format rule at the given index, or moves a conditional format rule to another
    /// index.</summary>
    public class UpdateConditionalFormatRuleRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The zero-based index of the rule that should be replaced or moved.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("index")]
        public virtual System.Nullable<int> Index { get; set; } 

        /// <summary>The zero-based new index the rule should end up at.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newIndex")]
        public virtual System.Nullable<int> NewIndex { get; set; } 

        /// <summary>The rule that should replace the rule at the given index.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rule")]
        public virtual ConditionalFormatRule Rule { get; set; } 

        /// <summary>The sheet of the rule to move.  Required if new_index is set, unused otherwise.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sheetId")]
        public virtual System.Nullable<int> SheetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of updating a conditional format rule.</summary>
    public class UpdateConditionalFormatRuleResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The index of the new rule.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newIndex")]
        public virtual System.Nullable<int> NewIndex { get; set; } 

        /// <summary>The new rule that replaced the old rule (if replacing), or the rule that was moved (if
        /// moved)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newRule")]
        public virtual ConditionalFormatRule NewRule { get; set; } 

        /// <summary>The old index of the rule. Not set if a rule was replaced (because it is the same as
        /// new_index).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oldIndex")]
        public virtual System.Nullable<int> OldIndex { get; set; } 

        /// <summary>The old (deleted) rule. Not set if a rule was moved (because it is the same as new_rule).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oldRule")]
        public virtual ConditionalFormatRule OldRule { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates properties of dimensions within the specified range.</summary>
    public class UpdateDimensionPropertiesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fields that should be updated.  At least one field must be specified. The root `properties` is
        /// implied and should not be specified. A single `"*"` can be used as short-hand for listing every
        /// field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>Properties to update.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual DimensionProperties Properties { get; set; } 

        /// <summary>The rows or columns to update.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual DimensionRange Range { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Update an embedded object's position (such as a moving or resizing a chart or image).</summary>
    public class UpdateEmbeddedObjectPositionRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fields of OverlayPosition that should be updated when setting a new position. Used only if
        /// newPosition.overlayPosition is set, in which case at least one field must be specified.  The root
        /// `newPosition.overlayPosition` is implied and should not be specified. A single `"*"` can be used as short-
        /// hand for listing every field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>An explicit position to move the embedded object to. If newPosition.sheetId is set, a new sheet
        /// with that ID will be created. If newPosition.newSheet is set to true, a new sheet will be created with an ID
        /// that will be chosen for you.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newPosition")]
        public virtual EmbeddedObjectPosition NewPosition { get; set; } 

        /// <summary>The ID of the object to moved.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("objectId")]
        public virtual System.Nullable<int> ObjectId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The result of updating an embedded object's position.</summary>
    public class UpdateEmbeddedObjectPositionResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The new position of the embedded object.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual EmbeddedObjectPosition Position { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates properties of the filter view.</summary>
    public class UpdateFilterViewRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fields that should be updated.  At least one field must be specified. The root `filter` is
        /// implied and should not be specified. A single `"*"` can be used as short-hand for listing every
        /// field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>The new properties of the filter view.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filter")]
        public virtual FilterView Filter { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates properties of the named range with the specified namedRangeId.</summary>
    public class UpdateNamedRangeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fields that should be updated.  At least one field must be specified. The root `namedRange` is
        /// implied and should not be specified. A single `"*"` can be used as short-hand for listing every
        /// field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>The named range to update with the new properties.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("namedRange")]
        public virtual NamedRange NamedRange { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates an existing protected range with the specified protectedRangeId.</summary>
    public class UpdateProtectedRangeRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fields that should be updated.  At least one field must be specified. The root `protectedRange`
        /// is implied and should not be specified. A single `"*"` can be used as short-hand for listing every
        /// field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>The protected range to update with the new properties.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("protectedRange")]
        public virtual ProtectedRange ProtectedRange { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates properties of the sheet with the specified sheetId.</summary>
    public class UpdateSheetPropertiesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fields that should be updated.  At least one field must be specified. The root `properties` is
        /// implied and should not be specified. A single `"*"` can be used as short-hand for listing every
        /// field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>The properties to update.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual SheetProperties Properties { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Updates properties of a spreadsheet.</summary>
    public class UpdateSpreadsheetPropertiesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The fields that should be updated.  At least one field must be specified. The root 'properties' is
        /// implied and should not be specified. A single `"*"` can be used as short-hand for listing every
        /// field.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fields")]
        public virtual object Fields { get; set; } 

        /// <summary>The properties to update.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properties")]
        public virtual SpreadsheetProperties Properties { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response when updating a range of values in a spreadsheet.</summary>
    public class UpdateValuesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The spreadsheet the updates were applied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("spreadsheetId")]
        public virtual string SpreadsheetId { get; set; } 

        /// <summary>The number of cells updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updatedCells")]
        public virtual System.Nullable<int> UpdatedCells { get; set; } 

        /// <summary>The number of columns where at least one cell in the column was updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updatedColumns")]
        public virtual System.Nullable<int> UpdatedColumns { get; set; } 

        /// <summary>The values of the cells after updates were applied. This is only included if the request's
        /// `includeValuesInResponse` field was `true`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updatedData")]
        public virtual ValueRange UpdatedData { get; set; } 

        /// <summary>The range (in A1 notation) that updates were applied to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updatedRange")]
        public virtual string UpdatedRange { get; set; } 

        /// <summary>The number of rows where at least one cell in the row was updated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("updatedRows")]
        public virtual System.Nullable<int> UpdatedRows { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Data within a range of the spreadsheet.</summary>
    public class ValueRange : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The major dimension of the values.
        ///
        /// For output, if the spreadsheet data is: `A1=1,B1=2,A2=3,B2=4`, then requesting
        /// `range=A1:B2,majorDimension=ROWS` will return `[[1,2],[3,4]]`, whereas requesting
        /// `range=A1:B2,majorDimension=COLUMNS` will return `[[1,3],[2,4]]`.
        ///
        /// For input, with `range=A1:B2,majorDimension=ROWS` then `[[1,2],[3,4]]` will set `A1=1,B1=2,A2=3,B2=4`. With
        /// `range=A1:B2,majorDimension=COLUMNS` then `[[1,2],[3,4]]` will set `A1=1,B1=3,A2=2,B2=4`.
        ///
        /// When writing, if this field is not set, it defaults to ROWS.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("majorDimension")]
        public virtual string MajorDimension { get; set; } 

        /// <summary>The range the values cover, in A1 notation. For output, this range indicates the entire requested
        /// range, even though the values will exclude trailing rows and columns. When appending values, this field
        /// represents the range to search for a table, after which values will be appended.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual string Range { get; set; } 

        /// <summary>The data that was read or to be written.  This is an array of arrays, the outer array representing
        /// all the data and each inner array representing a major dimension. Each item in the inner array corresponds
        /// with one cell.
        ///
        /// For output, empty trailing rows and columns will not be included.
        ///
        /// For input, supported value types are: bool, string, and double. Null values will be skipped. To set a cell
        /// to an empty value, set the string value to an empty string.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("values")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IList<object>> Values { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
